使用opencv提取Kinect的深度图像

时间:2012-05-25 19:52:25

标签: c++ opencv kinect

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

3 个答案:

答案 0 :(得分: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是常量,因此您需要克隆它才能操作它

答案 1 :(得分:0)

documentation拥有您需要的一切。无法详细阐述。

答案 2 :(得分:0)

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

  • 创建CV_16U类型的垫子a。 context.WaitOneUpdateAll(depth_map);湾Mdepth_original = Mat(h_depth,w_depth,CV_16U,(void *)depth_map.GetData())c。复制 Mat因为它会在下次阅读时被销毁: Mdepth_original.copyTo(深度);
  • 将深度映射为灰色或颜色。颜色似乎是一个好主意(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