kinect+openni学习笔记之10(不需要骨骼跟踪的人体多个手部分割)

kinect+openni学习笔记之10(不需要骨骼跟踪的人体多个手部分割)

ID:2059425

大小:163.00 KB

页数:13页

时间:2017-11-14

kinect+openni学习笔记之10(不需要骨骼跟踪的人体多个手部分割)_第1页
kinect+openni学习笔记之10(不需要骨骼跟踪的人体多个手部分割)_第2页
kinect+openni学习笔记之10(不需要骨骼跟踪的人体多个手部分割)_第3页
kinect+openni学习笔记之10(不需要骨骼跟踪的人体多个手部分割)_第4页
kinect+openni学习笔记之10(不需要骨骼跟踪的人体多个手部分割)_第5页
资源描述:

《kinect+openni学习笔记之10(不需要骨骼跟踪的人体多个手部分割)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Kinect+OpenNI学习笔记之10(不需要骨骼跟踪的人体多个手部分割)  前言  这篇文章主要是介绍多个手部的分割,是在前面的博文:不需要骨骼跟踪的人体手部分割 的基础上稍加改进的。因为识别有的一个应用场合就是手势语言识别,而手势一般都需要人的2只手相配合完成,因此很有必要对人体的多个手部来进行分割。  实验说明  其实本文中使用的还是OpenNI自带的一些算法实现的,因为OpenNI中自己本身就对每个手部有一个UserID的标志,所以我们每当检测到一只手时就可以把手的位置连同他的ID一起存下来,后面进行手势分割时按照检测到的不同手势分别进行分割即可。其程序流程图如下所

2、示:13     下面是本次实验特别需要注意的一些细节。  OpenNI知识点总结:  一般情况下OpenNI的回调函数中都会有一个参数pCookie,该参数就可以解决前面的博文Kinect+OpenNI学习笔记之7(OpenNI自带的类实现手部跟踪)13中提到的一个当时没有完美解决的问题:即回调函数与类的静态函数,类的静态变量这3者之间使用相互矛盾的问题。那个时候因为在回调函数中需要使用静态成员变量,所以类中普通的非静态成员变量是不能够使用的,否则程序会编译时会报错误。但是如果我们把这些普通变量在类中定义成了静态变量后,这些静态变量就属于类本身了,并不属于类的对象。因此该变

3、量在类的其它成员函数中是不能够被使用的。这样就产生了矛盾,当时的解决方法是将这些变量不放在类中,而放在类外称为整个工程的全局变量。虽然理论上可以解决问题,不过一个跟类有关的变量竟然不能够放在类的内部,听起来就像是个大笑话!这样的封装明显不合理。  幸运的是,现在因为回调函数传进来时有了pCookie这个变量,这样我们在回调函数中可以间接使用类的非静态成员变量了,使用这些变量既不需要定义为static类型,且也可以在类的成员函数中来进行初始化。具体方法是将某个节点(比如说手部,人体,姿势等节点)的注册函数RegisterGestureCallbacks()中第3个参数设置为th

4、is指针,而不是null指针。同时在具体的回调函数中,首先把pCookie指针强制转换成COpenNI这个类的指针,然后用转换过来的指针调用需要用到的类的成员变量。  C/C++知识点总结:  pair和map的区别:map是一个容器,容器中的第一个元素表示的是键值key,其它元素分别表示以后用该容器存储数据时的数据类型。因此map中的每一条记录的key值是不能重复的。当map定义的时候只有2个集合的时候,里面的每一条记录可以用pair来存储。因此可以简单的理解一个pair对应的是一条具体的记录,而一个map是一个存放pair的容器,并且map声明了容器的属性。当在进行pai

5、r数据类型的定义时,如果其元素中的一个已经确定,另一个还不知道,则在定义的同时可以直接传入确定的那个元素,另一个用它的数据类型后面接一个空括号即可。  在使用vector时,必须是已存在的元素才能用下标操作符进行索引。可以使用at和[]获取指定位置的数据或者给指定位置的数据赋值。  Qt知识点总结:  在QtCreator的使用中,有时候会出现两个尖括号在一起的情况,这时候没有语法错误,但是QtCreator这个编辑环境会在你的代码下出现个红色的波纹,让人看起来非常不舒服。例如:   解决方法非常简单,即把两个尖括号中间不要紧挨着,用一个空格号隔开一下即可,这时候红色的波纹警

6、告线就消失了。   实验结果  本工程可以对多个手部进行分割,分割效果取决于OpenNI中的手部跟踪效果。其效果截图如下:13     实验代码(附录有工程code下载链接)copenni.cpp:#ifndefCOPENNI_CLASS#defineCOPENNI_CLASS#include#include#includeusingnamespacexn;usingnamespacestd;classCOpenNI{13public:~COpenNI(){context.Release();//释放空间}bool

7、Initial(){//初始化status=context.Init();if(CheckError("Contextinitialfailed!")){returnfalse;}context.SetGlobalMirror(true);//设置镜像xmode.nXRes=640;xmode.nYRes=480;xmode.nFPS=30;//产生颜色nodestatus=image_generator.Create(context);if(CheckError("Createimagegenerat

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

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

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