如何从OpenCV矩阵转换为k4a_image_t(Azure Kinect SDK)

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

本文关键字:image Kinect SDK Azure k4a OpenCV 转换      更新时间:2023-10-16

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

这是链接: 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找回去。

我们希望获得有关如何使文档更清晰的反馈,因此如果您有建议,请随时对此发表评论。