Opencv Azure Kinect录制颜色格式

Opencv Azure Kinect录制颜色格式,opencv,azurekinect,Opencv,Azurekinect,我正在尝试读取Azure Kinect录制并保存帧中的图像。但是,无法设置颜色_格式,这在使用imwrite时会导致问题 我已阅读了此处的录音文档: 默认情况下,格式似乎是K4A_IMAGE_format_COLOR_MJPG。但我不确定在创建材质时要传递什么参数。对于BGRA32,它是CV_8UC4;对于深度图像,它是CV_16U 我假设有两种方法可以解决这个问题,一种是设置颜色格式,另一种是确定录制默认格式的正确参数。您可以使用OpenCV访问rgb,就像它是普通的网络摄像头一样: Vide

我正在尝试读取Azure Kinect录制并保存帧中的图像。但是,无法设置颜色_格式,这在使用imwrite时会导致问题

我已阅读了此处的录音文档:

默认情况下,格式似乎是K4A_IMAGE_format_COLOR_MJPG。但我不确定在创建材质时要传递什么参数。对于BGRA32,它是CV_8UC4;对于深度图像,它是CV_16U


我假设有两种方法可以解决这个问题,一种是设置颜色格式,另一种是确定录制默认格式的正确参数。

您可以使用OpenCV访问rgb,就像它是普通的网络摄像头一样:

VideoCapture cap(0); // open the default camera
cap.set(CV_CAP_PROP_FRAME_WIDTH, 3840);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 2160);
if (!cap.isOpened())  // check if we succeeded
    return -1;
Mat frame, img;
for (;;)
{

    cap >> frame; // get a new frame from camera
    cout << frame.cols << " x " << frame.rows << endl;
    resize(frame, img, Size(), 0.25, 0.25);
    imshow("frame", img);
    if (waitKey(30) >= 0) break;
}
最后,您可以将格式设置为RGBA32:

config.color_format = K4A_IMAGE_FORMAT_COLOR_BGRA32;
并将其转换为OpenCV Mat:

color_image = k4a_capture_get_color_image(capture);
    if (color_image)
    {
        uint8_t* buffer = k4a_image_get_buffer(color_image);        // get raw buffer
        cv::Mat colorMat(Hrgb, Wrgb, CV_8UC4, (void*)buffer, cv::Mat::AUTO_STEP);
        //do something with colorMat
        k4a_image_release(color_image);
    }
有关最后一个选项的更多详细信息,请参见此处:


最后一种解决方案的数据稍好一些,但3840x2160的缓冲区明显更大(33M vs~1.5M)。

您可以使用OpenCV访问rgb,就像它是普通的网络摄像头一样:

VideoCapture cap(0); // open the default camera
cap.set(CV_CAP_PROP_FRAME_WIDTH, 3840);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 2160);
if (!cap.isOpened())  // check if we succeeded
    return -1;
Mat frame, img;
for (;;)
{

    cap >> frame; // get a new frame from camera
    cout << frame.cols << " x " << frame.rows << endl;
    resize(frame, img, Size(), 0.25, 0.25);
    imshow("frame", img);
    if (waitKey(30) >= 0) break;
}
最后,您可以将格式设置为RGBA32:

config.color_format = K4A_IMAGE_FORMAT_COLOR_BGRA32;
并将其转换为OpenCV Mat:

color_image = k4a_capture_get_color_image(capture);
    if (color_image)
    {
        uint8_t* buffer = k4a_image_get_buffer(color_image);        // get raw buffer
        cv::Mat colorMat(Hrgb, Wrgb, CV_8UC4, (void*)buffer, cv::Mat::AUTO_STEP);
        //do something with colorMat
        k4a_image_release(color_image);
    }
有关最后一个选项的更多详细信息,请参见此处:


上一个解决方案的数据稍好一些,但3840x2160的缓冲区要大得多(33M对~1.5M)。

回答很好,谢谢!你能提供一个包含WriteToFile()方法的示例代码的链接吗?回答很好,谢谢!能否提供一个指向具有WriteToFile()方法的示例代码的链接。