如何在OpenCV中用OpenNi的deepPixel数组填充矩阵

How to fill a Matrix in OpenCV with depthPixel array of OpenNi

本文关键字:数组 deepPixel 填充 OpenNi OpenCV 中用      更新时间:2023-10-16

我对OpenCV有问题。从 kinect 接收深度帧后,我正在尝试用 frame.getData() 返回的数据填充矩阵(OpenCV 的垫子)。

问题是 depthMat 矩阵中的数据与 p1 数组中包含的数据不同(来自 frame.getData())。

有谁知道为什么会这样,或者我必须如何填充我的矩阵才能获得正确的结果。

DepthPixel* p1 = (DepthPixel*)frame.getData(); 
Mat depthMat = Mat(frame.getHeight(), frame.getWidth(), CV_16U, p1);

我用我的一个简单的程序测试了这段代码,它运行良好。但请记住,您正在做石膏。该函数getData()返回一个const void *,您要将其强制转换为非常量指针。这不是一个好的做法。文档中不清楚 getData() 返回的指针所指向的数据是否具有无限的生命周期。

更好的方法是将数据复制到缓冲区中,然后使用此缓冲区初始化cv::Mat

   depth.readFrame(&depthFrame);
   DepthPixel *depthPixels = new DepthPixel[depthFrame.getHeight()*depthFrame.getWidth()];
   memcpy(depthPixels, depthFrame.getData(), depthFrame.getHeight()*depthFrame.getWidth()*sizeof(uint16_t));
   cv::Mat depthImage(depthFrame.getHeight(), depthFrame.getWidth(), CV_16U, depthPixels);