OpenCV 用cv::Mat显示OpenNI获得的Kinect深度图片
2012-11-11 16:46
1001 查看
根据下面两个帖子改的程序
http://www.cnblogs.com/TravelingLight/archive/2010/12/28/1919147.html
http://viml.nchc.org.tw/blog/paper_info.php?CLASS_ID=1&SUB_ID=1&PAPER_ID=216
1~ 由于OpenNI获得的深度图片是12位无符号整数,而OpenCV显示的是8位的,所以要作转换。
RGB和BGR在内存对应的位置序列不同,所以也要转换。
2~ 编译环境不多说了吧?
http://www.javaforge.com/wiki/101904 有OpenNI的安装教程
OpenCV 2.2的… 配置好lib, include, dll那些就行了,http://www.opencv.org.cn 这里也有安装的东东
http://www.cnblogs.com/TravelingLight/archive/2010/12/28/1919147.html
http://viml.nchc.org.tw/blog/paper_info.php?CLASS_ID=1&SUB_ID=1&PAPER_ID=216
1~ 由于OpenNI获得的深度图片是12位无符号整数,而OpenCV显示的是8位的,所以要作转换。
RGB和BGR在内存对应的位置序列不同,所以也要转换。
2~ 编译环境不多说了吧?
http://www.javaforge.com/wiki/101904 有OpenNI的安装教程
OpenCV 2.2的… 配置好lib, include, dll那些就行了,http://www.opencv.org.cn 这里也有安装的东东
#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 testCheckOpenNIError( XnStatus eResult, string sStatus ) { if( eResult != XN_STATUS_OK ) cerr << sStatus << " Error: " << xnGetStatusString( eResult ) << endl; } int test( int argc, char** argv ) { XnStatus eResult = XN_STATUS_OK; // 1. initial val xn::DepthMetaData m_DepthMD; xn::ImageMetaData m_ImageMD; // for opencv Mat Mat m_depth16u( 480,640,CV_16UC1); Mat m_rgb8u( 480,640,CV_8UC3); Mat m_DepthShow( 480,640,CV_8UC1); Mat m_ImageShow( 480,640,CV_8UC3); cvNamedWindow("depth"); cvNamedWindow("image"); char key=0; // 2. initial context xn::Context mContext; eResult = mContext.Init(); CheckOpenNIError( eResult, "initialize context" ); // 3. create depth generator xn::DepthGenerator mDepthGenerator; eResult = mDepthGenerator.Create( mContext ); CheckOpenNIError( eResult, "Create depth generator" ); // 4. create image generator xn::ImageGenerator mImageGenerator; eResult = mImageGenerator.Create( mContext ); CheckOpenNIError( eResult, "Create image generator" ); // 5. set map mode XnMapOutputMode mapMode; mapMode.nXRes = 640; mapMode.nYRes = 480; mapMode.nFPS = 30; eResult = mDepthGenerator.SetMapOutputMode( mapMode ); eResult = mImageGenerator.SetMapOutputMode( mapMode ); // 6. correct view port mDepthGenerator.GetAlternativeViewPointCap().SetViewPoint( mImageGenerator ); // 7. tart generate data eResult = mContext.StartGeneratingAll(); // 8. read data eResult = mContext.WaitNoneUpdateAll(); while( (key!=27) && !(eResult = mContext.WaitNoneUpdateAll( )) ) { // 9a. get the depth map mDepthGenerator.GetMetaData(m_DepthMD); memcpy(m_depth16u.data,m_DepthMD.Data(),640*480*2); // 9b. get the image map mImageGenerator.GetMetaData(m_ImageMD); memcpy(m_rgb8u.data,m_ImageMD.Data(),640*480*3); m_depth16u.convertTo(m_DepthShow,CV_8U,255/2096.0); cvtColor(m_rgb8u,m_ImageShow,CV_RGB2BGR); imshow("depth", m_DepthShow); imshow("image", m_ImageShow); key=cvWaitKey(20); } // 10. stop mContext.StopGeneratingAll(); mContext.Shutdown(); return 0; }
相关文章推荐
- OpenCV 用cv::Mat显示OpenNI获得的Kinect深度图片
- kinect,openni,opencv 获取并显示深度与彩色图像
- OpenNI结合OpenCV显示Kinect彩色、深度及融合图像
- 基于Kinect-OpenNI-OpenCV-OpenGL的环境三维重构 windows vs2008 深度彩色图像
- Kinect开发教程二:OpenNI读取深度图像与彩色图像并显示
- Kinect开发:OpenNI读取深度图像与彩色图像并显示
- 用 OpenCV 和OpenNI 2输出kinect 的深度、彩色图
- OpenCV for Python [2]使用Matplotlib显示图片
- from: OpenNI+OpenCV对Kinect采集的彩色图和深度图进行滤波
- OpenNI1.5获取华硕XtionProLive深度图和彩色图并用OpenCV显示
- Kinect2.0 winSDK彩图深度图红外图Opencv显示
- [Mo]OpenNI+OpenCV处理kinect深度图,获取手掌骨架图像
- C#-opencv-------显示图片异常"Emgu.CV.CvInvoke"的类型初始值设
- 知乎上有一个问题“在mfc框架中,有上面方法能直接将opencv2.0库中的Mat格式图片传递到Picture Control”中显示?
- 在QT下测试openni+opencv,显示采集的深度图和彩色图
- 2 kinect for windows(k4w) sdk之提取深度图像并利用opencv显示
- Opencv 16位深度图片显示并保存
- Kinect&OpenNI开发(二) OpenCV实时显示手部位置数据
- Kinect开发教程八:OpenNI2显示深度、彩色及融合图像
- opencv2 在mfc窗口中显示关于cv::Mat 的解决方法