kinect,openni,opencv 获取并显示深度与彩色图像
来源:互联网 发布:功能强大不为人知软件 编辑:程序博客网 时间:2024/04/20 04:18
最近打算重拾kinect,研究骨骼、手势识别,做个备份,一年半前写的程序都找不到了转自:http://blog.csdn.net/chenxin_130/article/details/6696187#include <stdlib.h>#include <iostream>#include <string>//【1】#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; //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 初始化上下文,用来管理整个OpenNI上下文的部分) 。在进行起始化的时候,所有OpenNI建立,设定所需要的生产节点 xn::Context context; result = context.Init(); CheckOpenNIError( result, "initialize context" ); // creategenerator 生产节点,上下文传入,要注意,有时还需要输出模式;而以Kinect的来说,是要设定成为640× 480,30 FPS。 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,产生数据(generate data), context统一控制资料读取开关。StartGeneratingAll()开始,StopGeneratingAll()停止。 result = context.StartGeneratingAll(); //【6】读取资料 result = context.WaitNoneUpdateAll(); while( (key!=27) && !(result = context.WaitNoneUpdateAll( )) ) { //get meta data // Depth Generator 是一个「XnDepthPixel」的 const指针,实际上是640*480的数组,每个点代表该像素的深度,类别是XnDepthPixel; //深度值Win 32平台上等同于usigned short,0代表看不到,此外越远,灰度值越高,越偏向白色。GetDepthMap()也可以 // //GetImageMap()可获取grb,默认是XnUInt8(实际上就是 unsigned char)的 const指针,而这个数组大小是 640 x 480 x 3,每三個為一組、分別代表 RGB的值。 //也可以 GetRGB24ImageMap()取得 XnRGB24Pixel 这种格式,效果差异不大。image generator 也可以通过SetPixelFormat()修改每一個像素格式。 depthGenerator.GetMetaData(depthMD); //XN_PIXEL_FORMAT_GRAYSCALE_16_BIT imageGenerator.GetMetaData(imageMD);//XN_PIXEL_FORMAT_RGB24 memcpy(imgDepth16u->imageData,depthMD.Data(),640*480*2); memcpy(imgRGB8u->imageData,imageMD.Data(),640*480*3); /*const XnDepthPixel* pDepthMap = depthGenerator.GetDepthMap(); const XnUInt8* pRgbMap = imageGenerator.GetImageMap(); memcpy(imgDepth16u->imageData,pDepthMap,640*480*sizeof(XnDepthPixel)); memcpy(imgRGB8u->imageData,pRgbMap,640*480*3);*/ //【7】OpenCV output cvConvertScale(imgDepth16u,depthShow,255/4096.0,0); 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(); return 0;}
0 0
- kinect,openni,opencv 获取并显示深度与彩色图像
- OpenNI结合OpenCV显示Kinect彩色、深度及融合图像
- Kinect开发教程二:OpenNI读取深度图像与彩色图像并显示
- Kinect开发教程二:OpenNI读取深度图像与彩色图像并显示
- Kinect开发教程二:OpenNI读取深度图像与彩色图像并显示
- Heresy透過 OpneNI 合併 Kinect 深度以及彩色影像資料(Kinect开发教程二:OpenNI读取深度图像与彩色图像并显示)
- Heresy透過 OpneNI 讀取 Kinect 深度影像資料(Kinect开发教程二:OpenNI读取深度图像与彩色图像并显示)
- ROS使用openni获取Kinect彩色图像和深度图像
- 基于Kinect-OpenNI-OpenCV-OpenGL的环境三维重构 windows vs2008 深度彩色图像
- OpenCV--鼠标响应Kinect彩色图像显示深度信息
- Kinect 2 SDK + OpenCV 获取深度彩色图像
- Kinect+OpenNI学习笔记之4(OpenNI获取的图像结合OpenCV显示)
- kinect+openni获取kinect的颜色图像和深度图像
- OPenNI获取并保存彩色、深度视频
- [Mo]OpenNI+OpenCV处理kinect深度图,获取手掌骨架图像
- [Mo]OpenNI+OpenCV处理kinect深度图,获取手掌骨架图像
- ubuntu 14.04 +Kinect+ openNI+ openCV+ Sensorkinect 配置 +获取深度图像及相关问题
- Kinect sdk 2.0 + Opencv 获取深度图像并保存
- Twitter Storm: 创建一个新的storm项目
- matlab声音播放
- XP系统桌面DC对应的显存位置获取方法
- xcode免证书生成IPA文件
- 经典SQL语句大全
- kinect,openni,opencv 获取并显示深度与彩色图像
- Httpload
- [探讨] 高通AR制作过程中发布到android平台的问题
- Matlab 7.0
- 常用禁止缓存的四种方法
- 土地测量
- :求数组中最大值和下标
- C#基础-------.net程序员应学习技术
- 指定序的排序问题,记一个学生的问题