OpenNI1.5获取华硕XtionProLive深度图和彩色图并用OpenCV显示

华硕XtionPro类似Kinect,都是体感摄像机,可捕捉深度图和彩色图。

具体參数见:http://www.asus.com.cn/Multimedia/Xtion_PRO_LIVE/specifications/

实验设定的深度图和彩色图大小都是640480,规格上说彩色图支持更大分辨率。实測假设将彩色图设定为更大分辨率则会自己主动改为320240

OpenNI1.5获取华硕XtionProLive深度图和彩色图并用OpenCV显示

彩色图

OpenNI1.5获取华硕XtionProLive深度图和彩色图并用OpenCV显示

未配准时的深度图

OpenNI1.5获取华硕XtionProLive深度图和彩色图并用OpenCV显示

配准到彩色图后的深度图

OpenNI1.5获取华硕XtionProLive深度图和彩色图并用OpenCV显示

深度图配准到彩色图后的1:1融合图

OpenNI1.5获取华硕XtionProLive深度图和彩色图并用OpenCV显示

彩色图配准到深度图后的1:1融合图

OpenNI中提供4中数据流异步机制:

(1) WaitNoneUpdateAll():不等待流的更新,这样有可能读出来的和上次是同一帧
(2) WaitAndUpdateAll():等待深度和彩色流都更新
(3) WaitAnyUpdateAll():随意流有更新则返回

(4) WaitOneUpdateAll(ProductionNode &node):等待參数指定的流更新

代码:

#include 
#include 
#include 

//OpenCV c函数头文件
#include "opencv/cv.h"
#include "opencv/highgui.h"

//OpenCV c++函数头文件
#include 
#include 
#include 

#include   //OpenNI的头文件

using namespace std;
using namespace cv;
using namespace xn; // OpenNI的命名空间

int main()
{
    XnStatus result = XN_STATUS_OK;  //OpenNI函数的返回结果
    DepthMetaData depthMD; //OpenNI深度数据
    ImageMetaData imageMD; //OpenNI彩色数据

    //c版本号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);

    //c++版本号OpenCV
    Mat cvDepthImg, cvBGRImg, cvFusionImg;
    namedWindow("depth");
    namedWindow("RGB");
    namedWindow("fusion");

    // 创建并初始化设备上下文
    Context context;
    result = context.Init();
    if (XN_STATUS_OK != result)
        cerr<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);
        }
    }

    context.StopGeneratingAll(); //停止数据流
    context.Shutdown(); //关闭设备上下文
    destroyWindow("depth");
    destroyWindow("RGB");
    destroyWindow("fusion");

    //cvDestroyWindow("depth");
    //cvDestroyWindow("image");
    //cvReleaseImage(&imgDepth16u);
    //cvReleaseImage(&imgRGB8u);
    //cvReleaseImage(&depthShow);
    //cvReleaseImage(&imageShow);

    return 0;
}

环境配置:

华硕XtionProLive,Win7 32位系统,VS2010,OpenCV2.4.4,OpenNI1.5.2.23

源代码下载:

http://download.csdn.net/detail/masikkk/7581283

OpenNI1.5 + NITE + Sensor下载:

http://download.csdn.net/detail/masikkk/7581339

參考:

Kinect+OpenNI学习笔记之2(获取kinect的颜色图像和深度图像)

Kinect+OpenNI学习笔记之4(OpenNI获取的图像结合OpenCV显示)

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

OpenNI1.5获取华硕XtionProLive深度图和彩色图并用OpenCV显示

Original: https://www.cnblogs.com/mthoutai/p/7402910.html
Author: mthoutai
Title: OpenNI1.5获取华硕XtionProLive深度图和彩色图并用OpenCV显示

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/552802/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球