OpenNI2获取华硕XtionProLive深度图和彩色图并用OpenCV显示
来源:互联网 发布:淘宝手机评价删除 编辑:程序博客网 时间:2024/04/26 04:40
有了自己的独立博客,本文新地址:http://masikkk.com/blog/OpenNI2-ASUSXtionProLive-OpenCV/
使用OpenNI2打开XtionProLive时有个问题,彩色图分辨率无论如何设置始终是320*240,深度图倒是可以设成640*480,而OpenNI1.x是可以获取640*480的彩色图的。
彩色图
配准到彩色图后的深度图
1:1融合图
代码:
#include <opencv2/core/core.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/opencv.hpp>#include <iostream>#include "OpenNI.h"using namespace openni;using namespace cv;using namespace std;int main(){Status rc = STATUS_OK; // OpenNI函数执行结果//OpenNI2图VideoFrameRef oniDepthImg, oniColorImg;//OpenCV图Mat cvDepthImg, cvBGRImg, cvFusionImg;//初始化OpenNI2rc = OpenNI::initialize();//打开Kinect或Xtion设备Device device;const char * deviceURL = openni::ANY_DEVICE; //设备名rc = device.open(deviceURL);//创建并打开深度数据流VideoStream oniDepthStream; //深度数据流rc = oniDepthStream.create(device, SENSOR_DEPTH); //创建深度数据流if( STATUS_OK == rc ){//设置深度视频模式VideoMode modeDepth;modeDepth.setResolution(320,240/*640,480*/); //分辨率modeDepth.setFps(30); //帧率modeDepth.setPixelFormat(PIXEL_FORMAT_DEPTH_1_MM); //深度像素格式oniDepthStream.setVideoMode(modeDepth);oniDepthStream.start(); // 打开深度数据流if(STATUS_OK != rc){cerr << "无法打开深度数据流:"<<OpenNI::getExtendedError()<<endl;oniDepthStream.destroy();}}else{cerr << "无法创建深度数据流:"<<OpenNI::getExtendedError()<<endl;}//创建并打开彩色数据流VideoStream oniColorStream; //RGB数据流rc = oniColorStream.create(device, SENSOR_COLOR);if(STATUS_OK == rc){//设置彩色视频模式VideoMode modeColor;//不知道为什么,彩色图的分辨率无论如何设置始终都是320*240modeColor.setResolution(320,240/*1280,1040*/);//分辨率modeColor.setFps(30);//帧率modeColor.setPixelFormat(PIXEL_FORMAT_RGB888);//设置深度图和彩色图的配准模式if(device.isImageRegistrationModeSupported(IMAGE_REGISTRATION_DEPTH_TO_COLOR)){device.setImageRegistrationMode(IMAGE_REGISTRATION_DEPTH_TO_COLOR); //深度到彩色图配准}rc = oniColorStream.start(); //打开彩色数据流if( STATUS_OK != rc ){cerr<< "无法打开彩色数据流:"<<OpenNI::getExtendedError()<<endl;oniColorStream.destroy();}}else{cerr << "无法创建彩色数据流:"<<OpenNI::getExtendedError()<<endl;}if (!oniDepthStream.isValid() || !oniColorStream.isValid()){cerr << "彩色或深度数据流不合法"<<endl;OpenNI::shutdown();return 1;}namedWindow("depth");namedWindow("RGB");namedWindow("fusion");while(true){//读取一帧深度图if( STATUS_OK == oniDepthStream.readFrame(&oniDepthImg) ){Mat cvRawImg16U(oniDepthImg.getHeight(), oniDepthImg.getWidth(), CV_16UC1, (void*)oniDepthImg.getData());cvRawImg16U.convertTo(cvDepthImg, CV_8U, 255.0/(oniDepthStream.getMaxPixelValue()));flip(cvDepthImg,cvDepthImg,1);//水平翻转imshow("depth", cvDepthImg);}//读取一帧彩色图if( STATUS_OK == oniColorStream.readFrame(&oniColorImg) ){Mat cvRGBImg(oniColorImg.getHeight(), oniColorImg.getWidth(), CV_8UC3, (void*)oniColorImg.getData());cvtColor(cvRGBImg, cvBGRImg, CV_RGB2BGR);flip(cvBGRImg,cvBGRImg,1);//水平翻转imshow("RGB", cvBGRImg);}//融合图cvtColor(cvDepthImg,cvFusionImg,CV_GRAY2BGR);addWeighted(cvBGRImg, 0.5, cvFusionImg, 0.5, 0, cvFusionImg);flip(cvFusionImg,cvFusionImg,1);//水平翻转imshow("fusion", cvFusionImg);waitKey(30);//没有waitKey不显示图像}destroyWindow("depth");destroyWindow("RGB");destroyWindow("fusion");oniDepthStream.destroy();oniColorStream.destroy();device.close();OpenNI::shutdown();return 0;}
环境:
XtionProLive,Win7 32位,VS2010,OpenNI2.1.0,OpenCV2.4.4
源码下载:
http://download.csdn.net/detail/masikkk/7582485
OpenNI2.1下载:
http://download.csdn.net/detail/masikkk/7582489
参考:
Kinect+OpenNI学习笔记之2(获取kinect的颜色图像和深度图像)
Kinect+OpenNI学习笔记之4(OpenNI获取的图像结合OpenCV显示)
Kinect开发教程二:OpenNI读取深度图像与彩色图像并显示
0 0
- OpenNI2获取华硕XtionProLive深度图和彩色图并用OpenCV显示
- OpenNI1.5获取华硕XtionProLive深度图和彩色图并用OpenCV显示
- 关于OpenNI2和OpenCV2的那些事——获取彩色图和深度图(XtionProLive)
- OpenNI2显示深度、彩色及融合图像
- OpenNI2显示深度、彩色及融合图像
- Kinect中使用OpenNI2实现深度图和彩色图对齐
- ros环境下华硕xtion深度图和彩色图的配准问题
- 初次使用Kinect体感,并用OpenCV显示彩色景深骨骼图
- kinect_openni学习1-OpenNI2显示深度、彩色及融合图像
- Kinect SDK1.0 OpenCV显示彩色、深度、骨骼图
- 在QT下测试openni+opencv,显示采集的深度图和彩色图
- Kinect SDK(1):读取彩色、深度、骨骼信息并用OpenCV显示
- Kinect SDK(1):读取彩色、深度、骨骼信息并用OpenCV显示
- Kinect SDK(1):读取彩色、深度、骨骼信息并用OpenCV显示
- kinect,openni,opencv 获取并显示深度与彩色图像
- ros显示kinect v1彩色图和深度图问题
- Kinect for Windows V2和V1对比开发___彩色数据获取并用OpenCV2.4.10显示
- Kinect for Windows V2和V1对比开发___彩色数据获取并用OpenCV2.4.10显示
- 给程序员的几点建议——如何保持身心健康
- 程序员如何赚钱
- linux上进程状态查询
- 【Unity 3D】学习笔记二十六:unity游戏脚本(六)
- 2082 HDOJ 找单词
- OpenNI2获取华硕XtionProLive深度图和彩色图并用OpenCV显示
- java.math.BigDecimal、BinInteger类的用法
- 内存动态分配与释放,malloc和new区别
- java泛型
- 合成(Composite)模式
- mysql数据双向同步
- Cocos2D-X2.2.3学习笔记18(场景切换)
- 动态加载dll的方法
- 将磁盘分区标为活动或取消活动的方法