0

有谁知道使用 OpenCV 和 C++ 提取 Kinect 灰度深度图像的最简单方法是什么?这个领域的任何源代码?

4

3 回答 3

1

如果您使用 OpenNI SDK,您可以简单地指向缓冲区:

//on setup:
xn::DepthGenerator depthGenerator;
xn::DepthMetaData depthMD;
cv::Mat depthWrapper;

//on update loop,
//after context.WaitAnyUpdateAll();
depthGenerator.GetMetaData(depthMD);
depthWrapper = cv::Mat(depthMD.YRes(), depthMD.XRes(), CV_16UC1, (void*) depthMD.Data());

请注意,它depthWrapper是 const 所以你需要克隆它才能操作它

于 2012-06-11T17:02:14.507 回答
0

文档包含您需要的一切。没有比这更详细的了。

于 2012-06-11T18:59:14.967 回答
0

你需要做两件事(除了阅读上下文、深度生成器和 Kinect 的初始化):

  • 创建 CV_16U 类型的 Mat。context.WaitOneUpdateAll(depth_map); 湾。Mdepth_original = Mat(h_depth, w_depth, CV_16U, (void*) depth_map.GetData()) c. 复制 Mat,因为它会在下次读取时被破坏: Mdepth_original.copyTo(depth);
  • 将深度映射为灰色或彩色。颜色似乎是个好主意(256^3 级),但人眼对亮度变化更敏感。即使有 256 个关卡,您也可以使用 [直方图均衡][1] 技术相当好地映射 10,000 个 Kinect 关卡。最简单的方法是降低精度,只做 I(x, y) = 255.0*z(x, y)/z_range

以下是在 openNI2 中如何实现直方图均衡: https ://github.com/OpenNI/OpenNI2/blob/master/Samples/Common/OniSampleUtilities.h

于 2013-11-28T09:20:41.540 回答