OpenNI的深度图显示有主要有两种方法:
1.深度值直接赋值方法(同上一篇):
缺点:深度图层次不明显,主要由于位移操作导致
#include <stdlib.h>
#include <iostream>
#include <string>#include <XnCppWrapper.h>
#include "opencv/cv.h"
#include "opencv/highgui.h"using namespace std;
using namespace cv;void CheckOpenNIError( XnStatus result, string status )
{ if( result != XN_STATUS_OK ) cerr << status << " Error: " << xnGetStatusString( result ) << endl;
}int main( int argc, char** argv )
{XnStatus result = XN_STATUS_OK; xn::DepthMetaData depthMD;xn::ImageMetaData imageMD;//OpenCVIplImage* imgDepth16u=cvCreateImage(cvSize(640,480),IPL_DEPTH_16U,1);IplImage* imgRGB8u=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);IplImage* depthShow=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);IplImage* imageShow=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);cvNamedWindow("depth",1);cvNamedWindow("image",1);char key=0;//【2】// context xn::Context context; result = context.Init(); CheckOpenNIError( result, "initialize context" ); // creategenerator xn::DepthGenerator depthGenerator; result = depthGenerator.Create( context ); CheckOpenNIError( result, "Create depth generator" ); xn::ImageGenerator imageGenerator;result = imageGenerator.Create( context ); CheckOpenNIError( result, "Create image generator" );//【3】//map mode XnMapOutputMode mapMode; mapMode.nXRes = 640; mapMode.nYRes = 480; mapMode.nFPS = 30; result = depthGenerator.SetMapOutputMode( mapMode );