C++ 如何用OpenNi的depthPixel数组填充OpenCV中的矩阵

C++ 如何用OpenNi的depthPixel数组填充OpenCV中的矩阵,c++,opencv,kinect,openni,C++,Opencv,Kinect,Openni,我对OpenCV有问题。从kinect接收到深度帧后,我试图用frame.getData()返回的数据填充矩阵(OpenCV的Mat) 问题在于depthMat矩阵中的数据与p1数组中包含的数据(来自frame.getData())不同 有人知道为什么会这样,或者我必须如何填写矩阵才能得到正确的结果吗 DepthPixel* p1 = (DepthPixel*)frame.getData(); Mat depthMat = Mat(frame.getHeight(), frame.getWid

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

问题在于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);

如何验证depthPixels和depthImage中的数据相等?我试图将其写入一个文件(并进行转换),但它正在打印不同的数据,可能写入过程中16位的转换是问题所在。输出示例:depthPixels:2881,depthImage:1827178。。。