Kinect和Opencv,深度图像,如何使用它

Dr *_*ban 9 c++ opencv visual-c++ kinect

我使用的是Kinect和OpenCV(我使用的是c ++).我可以同时获得RGB和深度图像.使用RGB图像,我可以像往常一样"播放",模糊它,使用canny(将其转换为灰度),但我不能对深度图像做同样的事情.每次我想用深度图像做某事我都有例外.

我有以下代码来获取深度图像:

CvMat* depthMetersMat = cvCreateMat(480, 640, CV_16UC1 ); 
CvMat* imageMetersMat = cvCreateMat(480, 640, CV_16UC1 );
IplImage *kinectDepthImage = cvCreateImage( cvSize(640,480),16,1); 

const XnDepthPixel* pDepthMap = depth.GetDepthMap();

for (int y=0; y<XN_VGA_Y_RES; y++){ 
            for(int x=0;x<XN_VGA_X_RES;x++){ 
                depthMetersMat->data.s[y * XN_VGA_X_RES + x ] = 10 * pDepthMap[y * XN_VGA_X_RES + x]; 
          }
}

cvGetImage(depthMetersMat, kinectDepthImage);
Run Code Online (Sandbox Code Playgroud)

问题是我无法对kinectDepthImage做任何事情.我试图将它转换为灰度,然后使用canny,但我不知道如何转换它.

基本上我想将canny和laplacian应用于深度图像.

Dr *_*ban 5

问题是cvGetImage的输出是16位深度,而canny需要8位,因此我需要将其转换为8位,类似于:

cvConvertScale(depthMetersMat, kinectDepthImage8, 1.0/256.0, 0);
Run Code Online (Sandbox Code Playgroud)