使用OpenNI2打开XtionProLive时有个问题,彩色图分辨率不管怎样设置始终是320*240,深度图倒是能够设成640*480,而OpenNI1.x是能够获取640*480的彩色图的。

彩色图

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFzaWJ1YWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

配准到彩色图后的深度图

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFzaWJ1YWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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; //初始化OpenNI2
rc = 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*240
modeColor.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读取深度图像与彩色图像并显示


OpenNI2获取华硕XtionProLive深度图和彩色图并用OpenCV显示的更多相关文章

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

    华硕XtionPro类似Kinect,都是体感摄像机,可捕捉深度图和彩色图. 具体參数见:http://www.asus.com.cn/Multimedia/Xtion_PRO_LIVE/specif ...

  2. Kinect SDK(1):读取彩色、深度、骨骼信息并用OpenCV显示

    Kinect SDK 读取彩色.深度.骨骼信息并用OpenCV显示 一.原理说明 对于原理相信大家都明白大致的情况,因此,在此只说比较特别的部分. 1.1 深度流数据: 深度数据流所提供的图像帧中,每 ...

  3. kinect 深度图与彩色图对齐程序

    //#include "duiqi.hpp" #include "kinect.h" #include <iostream> #include &q ...

  4. Android-将RGB彩色图转换为灰度图

    package com.example.yanlei.wifi; import android.graphics.Bitmap; import android.graphics.BitmapFacto ...

  5. ECharts图表插件(4.x版本)使用(一、关系图force节点显示为自定义图像/图片,带分类选择)

    导读 ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safar ...

  6. 遭遇input与button按钮背景图失效不显示的解决办法

    笔者从事网页前端代码页面工程师已有多年,作为一个网页重构人员常常会遇到一些莫名其妙的DIV+CSS(正确的说法是XHTML+CSS)在 IE.FireFox火狐. 谷歌浏览器CHROME.苹果浏览器S ...

  7. input与button按钮背景图失效不显示的解决办法

    今天做公司的某个网站前端网页页面的时候笔者又遇到了难解决的网页前端DIVCSS代码问题,一个平时不会发生的怪事情发生了:为网页代码中的Form表单中的input 和 button 按钮标签在CSS样式 ...

  8. Kinect for Windows V2和V1对照开发___彩色数据获取并用OpenCV2.4.10显示

    V1彩色分辨率:640x480 V2彩色分辨率:1920x1080 1,打开彩色图像帧的方式 对于V1: 使用NuiImageStreamOpen方法打开 hr = m_PNuiSensor-> ...

  9. QT 实现彩色图亮度均衡,RGB和HSI空间互相转换

    从昨天折腾到今天.再折腾下去我都要上主楼了  大致和灰度图均衡是一样的,主要是不能像平滑什么的直接对R,G,B三个分量进行.这样出来的图像时没法看的.因此我们要对亮度进行均衡.而HSI彩色空间中的分量 ...

随机推荐

  1. 利用gradle加入构建版本

    在java的程序中,貌似都没有这个构建版本的概念.用的诸如eclipse. idea和android studio的IDE也没有直接提供构建版本的选项.只是我却想在android程序的版本其中加入一个 ...

  2. awk依照多个分隔符进行切割

    我们知道awk能够进行类似于cut之类的操作.如一个文件data例如以下 zhc-123|zhang hongchangfirst-99|zhang hongchang-100|zhang 假设我们 ...

  3. swift 创建第一个UIAlertView 和UIActionSheet

    //创建 UIActionSheet //一定要指明类型.不编译不通过 func ActionSheet(sender:UITapGestureRecognizer)     {         le ...

  4. C++对象模型——Inline Functions(第四章)

    4.5 Inline Functions 以下是Point class 的一个加法运算符的可能实现内容: class Point { friend Point operator+(const Poin ...

  5. 手机端使用rem的适配

    <html> <body> <!-- http://www.w3cfuns.com/notes/29143/79dafb7c07f6865f435af641869d312 ...

  6. 【canvas】跟随鼠标的星空连线

    2019-01-23 19:57:38 挂一个比较简单的一个canvas应用,利用CPU进行粒子实时计算,直接面向过程写的 帧动画:浏览器在下一个动画帧安排一次网页重绘,  requestAnimat ...

  7. django第三方库

    1. django_celery_beat 作用:网页端配置定时任务 注意:1,需要迁移表格 2.需要注册app python3 manage.py makemigrations python3 ma ...

  8. 洛谷 P1911 L国的战斗之排兵布阵

    P1911 L国的战斗之排兵布阵 题目背景 L国即将与I国发动战争!! 题目描述 L国的指挥官想让他的每一个军营都呈现出国徽形——“L”形(方向无所谓).当然,他的指挥营除外(这叫做个性),他想不出该 ...

  9. 洛谷 P3111 [USACO14DEC]牛慢跑Cow Jog_Sliver

    P3111 [USACO14DEC]牛慢跑Cow Jog_Sliver 题目描述 The cows are out exercising their hooves again! There are N ...

  10. MySQL具体解释(13)------------事务

    一. 什么是事务 事务就是一段sql 语句的批处理.可是这个批处理是一个atom(原子) .不可切割,要么都运行,要么回滚(rollback)都不运行. 二.为什么出现这样的技术 为什么要使用事务这个 ...