如何从 opencv 矩阵转换为 k4a_image_t (Azure kinect sdk)

how to convert from opencv matrix to k4a_image_t (Azure kinect sdk)

我正在尝试将 cv::Mat(CV_16UC1) 转换为 k4a_image_t。我正在尝试使用此函数进行转换此函数:k4a_image_create_from_buffer.

这里是link:https://microsoft.github.io/Azure-Kinect-Sensor-SDK/master/group___functions_gaf84f2a271bcf6afae429bbccd47071b3.html#gaf84f2a271bcf6afae429bbccd47071b3

到目前为止,我已经创建了创建图像所需的缓冲区数据。

std::vector<uchar> array;
if (depth_im.isContinuous())
{
    array.assign(depth_im.data, depth_im.data + depth_im.total());
}
else
{
    for (int i = 0; i < depth_im.rows; ++i)
{
    array.insert(array.end(), depth_im.ptr<uint16_t>(i), 
        depth_im.ptr<uint16_t>(i) + depth_im.cols);
}
}

uint8_t* b_data = reinterpret_cast<uint8_t*>(&array[0]);
k4a_image_t new_depth_im = NULL;

但是我不明白参数'buffer_release_cb_context'。

将其视为调用 buffer_release_cb 函数时所需对象的指针。如果您可以简单地根据传入的缓冲区指针编写该函数并释放内存,那就太好了,您不需要为 buffer_release_cb_context 传入任何内容,而是可以使用 NULL。如果您需要原始的 cv::Mat 对象,那么您应该将其传递给 buffer_release_cb_context 并知道您将在 buffer_release_cb() 调用中将其作为 *context 取回。

我们很乐意提供有关如何使文档更清晰的反馈,因此如果您有任何建议,请随时对此发表评论。