如何在OpenCV中用OpenNi的deepPixel数组填充矩阵
How to fill a Matrix in OpenCV with depthPixel array of OpenNi
我对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);
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '