2012-05-25 109 views

回答

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是常量,所以你需要複製它,以操縱它

0

documentation有一切你需要。無法詳細說明這一點。

0

你需要做兩件事情(除了閱讀方面,深度生成和初始化的Kinect):

  • 類型CV_16U一個創造墊。 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級別。一個簡單的方法,雖然是鬆散的精度和只是做我(X,Y)= 255.0 * Z(X,Y)/ z_range

這裏是如何直方圖均衡化是openNI2實現: https://github.com/OpenNI/OpenNI2/blob/master/Samples/Common/OniSampleUtilities.h