我遇到OpenCV问题。从kinect收到深度帧后,我试图用frame.getData()返回的数据填充Matrix(Mat的OpenCV)。
问题是depthMat矩阵中的数据与p1数组中包含的数据不同(来自frame.getData())。
有谁知道为什么会这样,或者我如何填写我的矩阵以获得正确的结果。
DepthPixel* p1 = (DepthPixel*)frame.getData();
Mat depthMat = Mat(frame.getHeight(), frame.getWidth(), CV_16U, p1);
答案 0 :(得分:1)
我用我的一个简单程序测试了这段代码,它运行得很好。
但请记住,你正在进行演员表演。函数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);