获取图像数据


  • 南宫NG·28



  • 南宫NG·28

    获取图像数据

    本文内容

    ● 配置并启动设备

    ● 稳定

    ● 重Capture中获取Image

    ● 获取图像数据

    ● 后续步骤


    本页面详细介绍了通过Femto Mega获取深度和彩色图像数据的方法。 获取图像数据前,需要先打开设备,并通过配置开启数据流,然后就可以获取图像数据。

    在配置和获取图像数据之前,必须查找并打开设备

    你可以参考 streaming sample, 这个例子演示了如何使用本文中描述的函数。

    文将介绍以下函数:

    ● k4a_device_start_cameras()

    ● k4a_device_get_capture()

    ● k4a_capture_get_depth_image()

    ● k4a_image_get_buffer()

    ● k4a_image_release()

    ● k4a_capture_release()

    ● k4a_device_stop_cameras()



    配置并启动设备

    Femto Mega  深度相机和彩色相机支持多种模式、分辨率和输出格式。 有关完整列表,请参考硬件规格

    流配置是通过 k4a_device_configuration_t 数据结构配置。

    k4a_device_configuration_t config = K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;
    config.camera_fps = K4A_FRAMES_PER_SECOND_30;
    config.color_format = K4A_IMAGE_FORMAT_COLOR_MJPG;
    config.color_resolution = K4A_COLOR_RESOLUTION_2160P;
    config.depth_mode = K4A_DEPTH_MODE_NFOV_UNBINNED;
    if (K4A_RESULT_SUCCEEDED != k4a_device_start_cameras(device, &config))
    {
        printf("Failed to start device\n");
        goto Exit;
    }


    相机启动后便不断捕获数据,直到调用k4a_device_stop_cameras()函数或设备Close。



    稳定

    使用多设备同步功能时,我们强烈建议使用固定的曝光设置。  如果使用自动曝光,最多可能需要20 帧,图像和帧速率才能稳定。



    从Device中获取Capture对象

    开启视频流后,Capture用来获取图像数据,每个Capture包含深度图像、IR 图像、彩色图像或这些图像的组合。


    默认情况下,API 只会在收到流模式请求的所有图像后才返回捕获。 可以通过将 k4a_device_configuration_t  synchronized_images_only 参数配置为 false,从而将 API 配置为在深度图像或彩色图像可用后,立即返回仅包含这些图像的部分捕获。

    // Capture a depth frame
    k4a_capture_t capture = NULL;
    switch (k4a_device_get_capture(device, &capture, TIMEOUT_IN_MS))
    {
    case K4A_WAIT_RESULT_SUCCEEDED:
        break;
    case K4A_WAIT_RESULT_TIMEOUT:
        printf("Timed out waiting for a capture\n");
        continue;
        break;
    case K4A_WAIT_RESULT_FAILED:
        printf("Failed to read a capture\n");
        goto Exit;
    }


    在 API 成功返回Capture后,当你用完Capture对象时,必须调用 k4a_capture_release()



    从Capture中获取Image

    若要获取Capture中包含的图像,请针对不同的图像类型调用相应的函数。

    ● k4a_capture_get_color_image()

    ● k4a_capture_get_depth_image()

    ● k4a_capture_get_ir_image()


    获取完图像数据后,需要调用k4a_image_release()释放k4a_image_t句柄。



    获取图像数据

    k4a_image_t 提供了获取图像属性的相应函数。

    如要获取图像的内存缓冲区,请使用 k4a_image_get_buffer

    以下示例演示如何从Capture中获取深度图像,获取IR和彩色图像的方法类似。 必须将图像类型变量替换为正确的图像类型,例如 ir 或 color。

    // Access the depth16 image
    k4a_image_t image = k4a_capture_get_depth_image(capture);
    if (image != NULL)
    {
        printf(" | Depth16 res:%4dx%4d stride:%5d\n",
                k4a_image_get_height_pixels(image),
                k4a_image_get_width_pixels(image),
                k4a_image_get_stride_bytes(image));
        // Release the image
        k4a_image_release(image);
    }
    // Release the capture
    k4a_capture_release(capture);



    后续步骤

    既然你已了解如何获取彩色图像和深度图像,使用 Femto Mega设备。 你还可以:获取IMU数据  图像转换

    友情链接: