kinect+openni学习笔记之6(获取人体骨架并在qt中显示)

kinect+openni学习笔记之6(获取人体骨架并在qt中显示)

ID:18523903

大小:438.50 KB

页数:17页

时间:2018-09-18

kinect+openni学习笔记之6(获取人体骨架并在qt中显示)_第1页
kinect+openni学习笔记之6(获取人体骨架并在qt中显示)_第2页
kinect+openni学习笔记之6(获取人体骨架并在qt中显示)_第3页
kinect+openni学习笔记之6(获取人体骨架并在qt中显示)_第4页
kinect+openni学习笔记之6(获取人体骨架并在qt中显示)_第5页
资源描述:

《kinect+openni学习笔记之6(获取人体骨架并在qt中显示)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、前言  MS的kinecSDK和OpenNI都提供了人体骨骼跟踪的算法,人体骨骼跟踪算法在kinect人体行为识别中非常重要,该识别过程通常被用来作为行为识别的第一步,比如说,通过定位人体中的骨骼支架,可以提取出人手的部位,从而可以把手的部分单独拿出来分析,这样就达到了手势的定位,而后面的手势识别则可以在刚刚定位出的领域进行处理。总而言之,一套有效的人体骨架追踪算法在kinect的一系列应用中非常有用,不过MSSDK和OpenNI虽然都提供了该算法类的直调用,但是其源码并没有开放,毕竟这是人家最核心的东东。  开发环境:QtCrea

2、tor2.5.1+OpenNI1.5.4.0+Qt4.8.2   实验说明  在老版本的OpenNI中,要对人进行骨架追踪,需要人先摆出PSI的姿势,然后系统根据该姿势进行骨骼校正,待校正完成后才进行骨骼的跟踪,其流程图可以参考下面的图:    由图可以看出,其完成骨骼跟踪主要分为3个部分,首先需检测到人体,然后需要固定的PSI姿势来对人体的姿势进行校正,待姿势校正完成后,才能进行人体骨骼的追踪。如果程序开发者用代码实现该过程则可以参考hersey的文章透过OpenNI/NITE分析人体骨架(上)和透过OpenNI/NITE分析人体

3、骨架(下),作者在这2篇文章详细介绍了老版本的人体骨架的OpenNI实现。  在新版本OpenNI1.5以后,人体骨架追踪算法更改了不少,其中最大的特点就是骨架跟踪过程中少了姿势校正的那一步骤,新版本中只需要人体站起来就可以进行跟踪了,http://biao.qqlove789.com使用起来方便很多,程序开发也简单不少。另外人体骨骼跟踪的效果也提高了不少,一旦骨骼追踪成功后,即使人体没有保持站立姿势有时候也还是可以继续跟踪的。新版本的人体骨骼跟踪算法使用流程图如下:     下面来看看程序中的Capability,它不同于前面文章

4、的generator:  在进行骨架的判断和姿态检测是需要用到OpenNI延伸的功能,与这种延伸功能相关的类可以称作为Capability。在进行人体骨骼分析时,usergenerator需要有支援Skeleton和PoseDetection这2个的capability。  在程序中需要绘制骨骼节点之间的连线,而节点的坐标和法向都有函数可以获得,获得的坐标为真实世界中的坐标,画图时需要在平面上绘制,因此需要这2个坐标系的转换,转换过程用到下面的函数:  XnStatusxn::DepthGenerator::ConvertRealW

5、orldToProjective(XnUInt32nCount,constXnPoint3DaRealWorld[],XnPoint3DaProjective[])  该函数表示将深度图获取的真实坐标系转换成平面图形显示的投影坐标系上。第1个参数表示转换坐标点的个数,第2个参数表示真实坐标系中的坐标,第3个参数表示投影坐标系下的坐标。  本实验的程序分为3个类和一个主函数,其中2个类的基本部分在前面的文章中已有介绍,只需要更新其部分功能。下面是本实验中这3个类的设计。当然这都是参考heresy的博客使用Qt显示OpenNI的人体骨架

6、。  COpenNI类的更新:  因为需要对人体进行骨骼跟踪,所以需要用到OpenNI的UserGenerator这个类。在private变量一栏增加这个类对象的声明。然后在类的Init()函数中使用Create方法产生人体的node。同上一篇博客Kinect+OpenNI学习笔记之5(使用OpenNI自带的类进行简单手势识别)中类似,这里的人体骨架校正,跟踪等都是通过回调函数的形式进行的,因此还需要在Init()函数中设置这个node的检测到有新人进入和骨骼校正完成的回调函数(其实还有旧人体目标离去,骨骼校正开始这2个也可以设置回

7、调函数,但在本程序中因为不需要使用它们,因此可以省略不写,http://beizhu.ttplay8.cn老版本的OpenNI是不允许省略的)。另外,由于色彩节点,深度节点,以及人体检测节点都是私有变量,如果该类的对象需要获取该变量的话不方便,因此在共有函数部分分别设置了3个共有函数来获取这3个变量。具体该类的全部代码参加本文后面的代码部分。  CSkeletonItem类的设计:  CSkeletonItem这个类主要来完成骨架节点位置的获取,以及画出item中节点之间的连线,同时也在节点位置处画出圆圈代表对应节点的位置。  在构

8、造函数中,设计了一个二维的连接表矩阵,矩阵的大小为14*2,即有14条边,每条边有2个顶点,矩阵中对应位置的值表示的是对应边的节点骨架的标号,在OpenNI中人体的骨架节点共分为15个,手脚共12个,头部2个,躯干1个。如下图所示: 

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

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

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