kinect+openni学习笔记之2(获取kinect的颜色图像和深度图像)

kinect+openni学习笔记之2(获取kinect的颜色图像和深度图像)

ID:1485218

大小:1.41 MB

页数:12页

时间:2017-11-11

kinect+openni学习笔记之2(获取kinect的颜色图像和深度图像)_第1页
kinect+openni学习笔记之2(获取kinect的颜色图像和深度图像)_第2页
kinect+openni学习笔记之2(获取kinect的颜色图像和深度图像)_第3页
kinect+openni学习笔记之2(获取kinect的颜色图像和深度图像)_第4页
kinect+openni学习笔记之2(获取kinect的颜色图像和深度图像)_第5页
资源描述:

《kinect+openni学习笔记之2(获取kinect的颜色图像和深度图像)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Kinect+OpenNI学习笔记之2(获取kinect的颜色图像和深度图像)   前言  网上有不少使用Qt做界面,OpenNI为库来开发kinect。或许大家的第一个问题就是询问该怎样使用Kinect来获取颜色信息图和深度信息图呢?这一节就是简单来回答这个问题的。  开发环境:QtCreator2.5.1+OpenNI1.5.4.0+Qt4.8.2   实验说明:  在使用OpenNI来驱动读取kinect数据时,我们需要了解contextobject这个名词。查看了下OpenNIUserGuide文档,简

2、单翻译下这个名词的意思:  Context是openNI中一个主要的object,它掌握了OpenNI使用过程中应用程序的全部状态,以及这些状态的prodectionchains,一个应用程序有多个context,但是这些context之间不能共享信息。例如一个中间件节点不能使用另一个context的驱动节点。Context在使用前必须被立即初始化,因此此时所有嵌入的模块被下载和分析。为了释放context的内存,应用程序需调用shutdown程序。        虽然翻译得不准确,但是它的大概意思就是告诉我们

3、在驱动kinect时,需要用到context这个类,且我们需要安装一定顺序去使用,这与一些常见的库驱动差不多,比如opengl,这些都需要什么初始化啊,设置属性啊等。因此我们只需要直接去看懂他人的一个工程实例就ok了。  好了,本文参考Heresy的教程中的源码写的。  在新建好工程文件后,需要包含XnCppWrapper头文件,且需在Qt工程中设置好头文件目录和库文件目录。  使用OpenNI读取颜色图和深度图的步骤如下(这个是程序的核心部分):  1.定义一个Context对象,并调用该对象的Init()方

4、法来进行初始化。  2.定义一个XnMapOutputMode格式对象,设置好分图像分辨率和帧率。  3.定义颜色图和深度图的节点对象,并用其Create()方法来创建,参数为Context对象.  4.设置颜色和深度图的输出模式,调用的方法是SetMapOutputMode();参数为步骤2中定义和设置好了的XnMapOutputMode对象。  6.如果深度图和颜色图在一张图上显示,则必须对深度图像进行校正,校正的方法是调用深度图的如下方法:.GetAlternativeViewPointCap().Set

5、ViewPoint();  7.调用context对象的StartGeneratingAll()来开启设备读取数据开关。  8.调用context对象的更新数据方法,比如WaitAndupdateAll()方法。12  9.定义颜色图和色彩图的ImageMetaData对象,并利用对应的节点对象的方法GetMetaData(),将获取到的数据保存到对应的ImageMetaData对象中。  10.如果需要将深度图转换成灰度图来显示,则需要自己将深度值转换成0~255的单通道或者多通道数据,然后直接用来显示。  

6、注意如果没有设置视觉校正,则深度图的显示与颜色图的显示会出现对应不上的情况,后面的实验可以看出这2者的区别,另外对于是否需要设置镜像就要看自己的具体应用场合了。   实验结果:  下面分别分是否设置图像镜像,是否对深度图像进行校正来给出实验结果.  无镜像无校正:   12  无镜像有校正:     有镜像无校正:  12     有镜像有校正:12     从有无镜像可以看出,设置镜像的效果与字面的理解是一样的,即有镜像时就相当于取镜子中的图像。有无校正可以看出,没有校正时,深度图片和颜色图片同一个物体都对应

7、不起来,可以看下天花板上的吊灯就可以发现,没校正,2者不重合,且相差不少。有校正时效果就好多了,只是此时的深度图像显示的范围要稍小些。   实验主要部分代码及注释(附录有工程code下载链接):  首先来个最小工程,即去掉那些错误处理代码:  main.cpp:#include#include//包含OpenNI的头文件12usingnamespacexn;//使用OpenNI库中的命名空间//全局的OpenNIobjectContextg_context;Imag

8、eGeneratorg_image_generator;DepthGeneratorg_depth_generator;//全局的QtObjectQGraphicsPixmapItem*g_image_map;QGraphicsPixmapItem*g_depth_map;//CTimer类的定义classCTimer:publicQObject{public:voidstart(){

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。