前言
在上一篇文章 Kinect+OpenNI 学习笔记之 2( 获取 kinect 的颜色图像和深度图像) 中,已
经介绍了怎样使用 OpenNI 来获取 Kinect 的深度数据和颜色数据,并将获取到的结果在 Qt 中显
示,不过那个代码是写在同一个 cpp 文件中,以后用到的时候不能讲这些显示的基本过程单独
拿出来,比较麻烦。所以这节主要是将 OpenNI 获取图像的流程以及 Qt 显示这些图像的结果分
开为了 2 个类来写,方便以后工程的直接拷贝。
开发环境:QtCreator2.5.1+OpenNI1.5.4.0+Qt4.8.2
实验说明
COpenNI 这个类主要是初始化 kinect 设备,并获取深度图像和颜色图像,参加上一篇博
客的初始化过程步骤,如果遇到错误,则有相应的错误处理过程。CKinectReader 类是将
COpenNI 这个类读取到的结果显示在 Qt 的界面上的。因此一个类是负责与硬件 Kinect 打交
道,一个类是负责与人(界面显示)打交道的。具体的过程见上篇文章的分析和后面的代码。
这里发现一个小问题,与 kinect 有关的工程如果改变了代码,则在每次编译前最好 clean
一下,因为有可能是与硬件设备相关,没有 clean 的工程和 clean 后的工程效果有时会不同。
C/C++知识点总结:
在构造函数中可以使用冒号给类中的数据成员赋值,这样的好处就是可以给常量和引用变量
赋值初始化赋值的效果。
类的私有成员只能是类内部的函数调用,连类的对象都不能去调用私有成员变量。
在类的内部使用 qDebug(), cout 等函数输出调试时是不行的。
隐式数据类型转换,如果是同种类型的数据进行四则运算,则得出的结果也是那种类型,如
果其中有常数类型的数据常数参与,则得出的结果会自动转换成跟常数类型相同的类型。
如果一个类以单独一个 cpp 文件出现,在使用到该类的时候,直接 include 该 cpp 文件.
实验结果
在程序中设置了镜像和视觉校正,且将 kinect 感应不到深度信息的地方全部显示为不透明
的黑色,因此你在图中看到的黑色部分就是 kinect 的深度盲区。
效果如下:
- 1
- 2
- 3
- 4
前往页