C++ 如何用OpenNi的depthPixel数组填充OpenCV中的矩阵
我对OpenCV有问题。从kinect接收到深度帧后,我试图用frame.getData()返回的数据填充矩阵(OpenCV的Mat) 问题在于depthMat矩阵中的数据与p1数组中包含的数据(来自frame.getData())不同 有人知道为什么会这样,或者我必须如何填写矩阵才能得到正确的结果吗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
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。。。