OpenNI1.5擷取華碩XtionProLive深度圖和彩色圖並用OpenCV顯示

來源:互聯網
上載者:User

標籤:openni   xtionpro   

華碩XtionPro類似Kinect,都是體感攝像機,可捕捉深度圖和彩色圖,

詳細參數見:http://www.asus.com.cn/Multimedia/Xtion_PRO_LIVE/specifications/


實驗設定的深度圖和彩色圖大小都是640*480,如下:


彩色圖


未配準時的深度圖



配准到彩色圖後的深度圖



深度圖配准到彩色圖後的1:1融合圖



彩色圖配准到深度圖後的1:1融合圖



代碼:

#include <stdlib.h>#include <iostream>#include <string>//OpenCV c函數標頭檔#include "opencv/cv.h"#include "opencv/highgui.h"//OpenCV c++函數標頭檔#include <opencv2/core/core.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <opencv2/highgui/highgui.hpp>#include <XnCppWrapper.h>  //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++版本OpenCVMat cvDepthImg, cvBGRImg, cvFusionImg;namedWindow("depth");namedWindow("RGB");namedWindow("fusion");// 建立並初始化裝置上下文Context context; result = context.Init(); if (XN_STATUS_OK != result)cerr<<"裝置上下文初始化錯誤"<<endl;// 建立深度產生器和彩色產生器DepthGenerator depthGenerator;  result = depthGenerator.Create( context ); if (XN_STATUS_OK != result)cerr<<"建立深度產生器錯誤"<<endl;ImageGenerator imageGenerator;result = imageGenerator.Create( context ); if (XN_STATUS_OK != result)cerr<<"建立彩色產生器錯誤"<<endl;//通過映射模式來設定產生器參數,如解析度、幀率XnMapOutputMode mapMode; mapMode.nXRes = 640;  mapMode.nYRes = 480; mapMode.nFPS = 30; result = depthGenerator.SetMapOutputMode( mapMode );  result = imageGenerator.SetMapOutputMode( mapMode );  // 將深度產生器的視角對齊到彩色產生器,將深度資料配准到彩色資料depthGenerator.GetAlternativeViewPointCap().SetViewPoint( imageGenerator ); //imageGenerator.GetAlternativeViewPointCap().SetViewPoint(depthGenerator); //彩色圖配准到深度圖// 啟動所有產生器,即啟動資料流result = context.StartGeneratingAll();  while( true){// 更新資料result = context.WaitNoneUpdateAll(); if (XN_STATUS_OK == result){//擷取一幀深度圖並轉換為OpenCV中的映像格式depthGenerator.GetMetaData(depthMD); Mat cvRawImg16U(depthMD.FullYRes(), depthMD.FullXRes(), CV_16UC1, (char *)depthMD.Data() );cvRawImg16U.convertTo(cvDepthImg, CV_8U, 255.0/(depthMD.ZRes()));imshow("depth", cvDepthImg);//擷取一幀彩色圖並轉換為OpenCV中的映像格式imageGenerator.GetMetaData(imageMD);Mat cvRGBImg(imageMD.FullYRes(), imageMD.FullXRes(), CV_8UC3, (char *)imageMD.Data());cvtColor(cvRGBImg, cvBGRImg, CV_RGB2BGR);imshow("RGB", cvBGRImg);//融合圖cvtColor(cvDepthImg,cvFusionImg,CV_GRAY2BGR);addWeighted(cvBGRImg, 0.5, cvFusionImg, 0.5, 0, cvFusionImg);imshow("fusion", cvFusionImg);waitKey(30); //沒有waitKey不顯示映像// c函數形式//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);}}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讀取深度映像與彩色映像並顯示



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.