Kinect开发:OpenNI读取深度图像与彩色图像并显示

#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;  
        TRACE( xnGetStatusString( result )  );
    }
}
 
void Ckinect_opencvDlg::OnBnClickedButton1()
{
    // TODO: Add your control notification handler code here
    XnStatus result = XN_STATUS_OK;    
    xn::DepthMetaData depthMD;  
    xn::ImageMetaData imageMD;  
  
    //OpenCV  
    IplImage*  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 );    
    result = imageGenerator.SetMapOutputMode( mapMode );    
  
    //【4】  
    // correct view port    
    depthGenerator.GetAlternativeViewPointCap().SetViewPoint( imageGenerator );   
  
    //【5】  
    //read data  
    result = context.StartGeneratingAll();    
    //【6】  
    result = context.WaitNoneUpdateAll();    
  
    while( (key!=27) && !(result = context.WaitNoneUpdateAll( ))  )   
    {    
        //get meta data  
        depthGenerator.GetMetaData(depthMD);   
        imageGenerator.GetMetaData(imageMD);  
  
        //【7】  
        //OpenCV output  
        memcpy(imgDepth16u->imageData,depthMD.Data(),640*480*2);  
        cvConvertScale(imgDepth16u,depthShow,255/4096.0,0);  
        memcpy(imgRGB8u->imageData,imageMD.Data(),640*480*3);  
        cvCvtColor(imgRGB8u,imageShow,CV_RGB2BGR);  
        cvShowImage("depth", depthShow);  
        cvShowImage("image",imageShow);  
        key=cvWaitKey(20);  
    }  
  
    //destroy  
    cvDestroyWindow("depth");  
    cvDestroyWindow("image");  
    cvReleaseImage(&imgDepth16u);  
    cvReleaseImage(&imgRGB8u);  
    cvReleaseImage(&depthShow);  
    cvReleaseImage(&imageShow);  
    context.StopGeneratingAll();  
    context.Shutdown();       
}

转自 http://blog.csdn.net/chenxin_130/article/details/6696187,以备忘。

转载于:https://www.cnblogs.com/tokushima/archive/2012/12/04/2801723.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值