如何从 Azure Kinect 中提取颜色数据?
How to extract the color data from Azure Kinect?
我需要从 Azure Kinect 中提取颜色和深度数据并将其保存到文件中。
我查看了 SDK 示例,但我无法理解。
设置完所有内容后,我可以通过以下方式获取颜色数据:
k4a_device_configuration_t config = K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;
config.color_format = K4A_IMAGE_FORMAT_COLOR_BGRA32;
config.color_resolution = K4A_COLOR_RESOLUTION_720P;
config.depth_mode = K4A_DEPTH_MODE_NFOV_UNBINNED;
config.camera_fps = K4A_FRAMES_PER_SECOND_30;
k4a_device_start_cameras(device, &config);
k4a_device_get_capture(device, &capture, TIMEOUT_IN_MS)
k4a_image_t image;
image = k4a_capture_get_color_image(capture);
uint8_t* color_data = (uint8_t*)(void*)k4a_image_get_buffer(image);
然后呢?如何解析每个像素的颜色值?
这对我来说是全新的,如有任何帮助,我们将不胜感激。
提前致谢,
圭多
这个要看你要的颜色point/pixel是在哪个坐标系的,在原点颜色space中直接在buffer中用index = y * width + x
就可以找到。
在其他坐标 space 中获取 points/pixels 的颜色需要从颜色缓冲区或深度缓冲区进行转换。可以找到此过程的详细信息 here in the SDK. I'm also developing a library,它获取深度点的颜色数据,可以让您更深入地了解此过程。
这是我使用 OpenCV 的方式:
uint8_t* image_data = (uint8_t*)(void*)k4a_image_get_buffer(color_image);
cv::Mat color_frame = cv::Mat(k4a_image_get_height_pixels(color_image), k4a_image_get_width_pixels(color_image), CV_8UC4, image_data, cv::Mat::AUTO_STEP);
我需要从 Azure Kinect 中提取颜色和深度数据并将其保存到文件中。 我查看了 SDK 示例,但我无法理解。
设置完所有内容后,我可以通过以下方式获取颜色数据:
k4a_device_configuration_t config = K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;
config.color_format = K4A_IMAGE_FORMAT_COLOR_BGRA32;
config.color_resolution = K4A_COLOR_RESOLUTION_720P;
config.depth_mode = K4A_DEPTH_MODE_NFOV_UNBINNED;
config.camera_fps = K4A_FRAMES_PER_SECOND_30;
k4a_device_start_cameras(device, &config);
k4a_device_get_capture(device, &capture, TIMEOUT_IN_MS)
k4a_image_t image;
image = k4a_capture_get_color_image(capture);
uint8_t* color_data = (uint8_t*)(void*)k4a_image_get_buffer(image);
然后呢?如何解析每个像素的颜色值?
这对我来说是全新的,如有任何帮助,我们将不胜感激。 提前致谢, 圭多
这个要看你要的颜色point/pixel是在哪个坐标系的,在原点颜色space中直接在buffer中用index = y * width + x
就可以找到。
在其他坐标 space 中获取 points/pixels 的颜色需要从颜色缓冲区或深度缓冲区进行转换。可以找到此过程的详细信息 here in the SDK. I'm also developing a library,它获取深度点的颜色数据,可以让您更深入地了解此过程。
这是我使用 OpenCV 的方式:
uint8_t* image_data = (uint8_t*)(void*)k4a_image_get_buffer(color_image);
cv::Mat color_frame = cv::Mat(k4a_image_get_height_pixels(color_image), k4a_image_get_width_pixels(color_image), CV_8UC4, image_data, cv::Mat::AUTO_STEP);