- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
前言
本文所设计的类主要是和人体的手部打交道的,与人体的检测,姿势校正,骨架跟踪没有关系,所以本次类的设计中是在前面的OpenNI+Kinect系列博文基础上去掉那些与手势无关的驱动,较小代码量负担。类中保留下来有手势识别,手部跟踪,以及手部跟踪的轨迹和多个手部的位置坐标等信息。本类的设计也开始慢慢遵循一些C/C++编程规范,这里采用的是google的编程规范。
本文测试设计出的类的功能是与博文不需要骨骼跟踪的人体多个手部分割?一样,进行人体多个手部跟踪和分割。
开发环境:开发环境:QtCreator2.5.1+OpenNI+Qt4.8.2+OpenCV2.4.2
?
Google编程规范节选
类的设计的规范性,首先是遵循一定的编程风格,这里本人采用的是google C++编程风格。Google编程规范具体内容可以参考网页:Google C++ Style Guide。 这次类的设计是在前面的博文使用OpenNI自带的类进行简单手势识别 和博文不需要骨骼跟踪的人体多个手部分割 的基础上从下面几个地方做了编程风格规范:
1.? 将类的设计分开为头文件和源文件,前面类的设计是在一个cpp文件中。分开设计的目的是使代码看起来结构更加清晰。
2. 在类中使用特定的声明次序,即public在前,随后依次为protected, private.且在其内部是成员函数在成员变量之前。比如在public的内部,一般的声明次序为:typedef和enums,常量,构造函数,析构函数,成员函数(包括静态成员函数),数据成员(包括静态数据成员)。
3. 类中的函数体要尽量短小,紧凑,功能单一。
4. 类的成员函数命名以大写字母开头,每个单词首字母大写,没有下划线。内联函数命名除外。
5. 类的成员变量名一徇小写,单词间以下划线相还,并以下划线结尾。
6. Typedef类型命名时,其类型名字每个单词以大写字母开头,不包含下划线。
?
? ? openNI知识点总结
从OpenNI源码的下面2句代码中可以看出,XnUserID是unsigned int类型。
typedef unsigned int XnUInt32;
typedef XnUInt32 XnUserID;
openni有些回调函数中会有传入参数类型为XnUserID的数据,比如在本文讲类的设计中,XnUserID类型就代表检测到的不同手部的id号,因为该id理论上是用来表明不同的手部的,因此当检测到新的手部时,系统中XnUserID类型对应变量将会加1。总的来看,XnUserID类型对应的变量值一直在递增,刚刚上面有讲到XnUserID是unsigned int类型的,所以其表示的范围能力可以是很大,即使由于视频中出现有很多的误检导致其值增加很多,这还是足够用了的。误检主要是某些情况下, 人的一只手由于运动速度过快或者其背景的干扰,在手势检测过程中有可能同时被当做是几十只手,这时候手部的id值就会一下子增加很多。所以在程序的后续的跟踪过程中,id值(通过输出到后台来观察)有可能很大。这时如果要遍历id的话,会影响程序的速度和内存开销。但是这也没有办法,因为我们的工作是基于OpenNI的手部跟踪的基础上的,只能依靠手部跟踪的性能了。
虽然说手部的id值会很大,但是我们在一个视野中出现的手的个数并不是特别多,顶多几十只手。所以在程序中如果要给不同的手部不同的颜色跟踪,或者对不同的手部都采用不同的掩膜区域,此时设置为颜色的个数和掩膜区域的个数就不需要最大的id值那么大了,因为虽然id值高,但是有些手部退出了视野,其内存中对应存的id那一项被删掉了,实际的手的数目不会特别大。因此在程序中,我们可以先不考虑id的最大值,而设置一个手部最大的个数,比如说20。然后用id值对最大个数20取掩膜来进行遍历。如果程序中不用它来求默认个数的掩膜的话,随着id值的增加,程序运行时有可能会连续出现下面3个错误:
?
为了解决这个错误都弄了大半天了。其原因是程序中id的值一直在增加,且人为修改它的值起不到任何效果,它是由OpenNI内部决定的。
?
?
C/C++知识点总结
define和typedef使用时恰恰相反,简单一点来理解:define是将它后面的第1个来代替第2个使用,而typedef是将它后面的第2个来代替第1个使用。
?
类的源码
copennihand.h:
#ifndef COpenniHand_H
#define COpenniHand_H
#include XnCppWrapper.h
#include iostream
#include vector
#inc
您可能关注的文档
- 4. 线性规划方法——投资的收益和风险.doc
- 4.施工组织设计.doc
- 4.旋挖钻机成孔灌注桩施工工艺工法(干挖).doc
- 4.水泥稳定碎石上基层施工方案.doc
- 5 排水系统设计及桥涵设计.doc
- 5#楼钻孔灌注桩工程施工专项方案.doc
- 5%水泥稳定碎石底基层配合比设计.doc
- 5.毕业设计(论文)教学档案(附件二)42546.doc
- 5设计支持手势操作的 XNA 游戏.doc
- 6 全文总结.doc
- KT853-1-1 李庆庆 任务书.doc
- KT853-1-22 贺晓娜 任务书.doc
- L 2003211052_王翔_汽车销售管理系统的设计与开发29986.doc
- linux 操作实现即时通讯程序.doc
- L_2003211052_王翔_汽车销售管理系统的设计与开发.doc
- matlab功率谱估计.doc
- MCS-51单片机应用设计课后答案44674.doc
- MCS-51单片机温度控制系统44780.doc
- MM_DEV_ERP全覆盖项目_采购订单入库记录一览表_开发功能说明书_20101116_刘海波_V1.1.doc
- M银行江西省分行论文:M银行江西省分行零售贷款营销策略研究.doc
最近下载
- 2025年全国中小学校党组织书记网络培训示范班在线考试题库及答案.docx VIP
- 2025既有建筑消防改造设计指南.docx VIP
- 甘肃省乡镇卫生院名单2021版1549家(中心卫生院453+卫生院1096)1.docx VIP
- 2024年广州白云高新区投资集团有限公司人员招聘笔试备考题库及答案解析.docx VIP
- 全球变化课件01-地球系统与全球变化.ppt VIP
- 注册土木工程师(水利水电工程)预测试题.pdf VIP
- 2023年广州白云产业投资集团有限公司人员招聘考试参考题库及答案解析.docx VIP
- 2025年吉林省中考语文试卷真题(含答案).docx
- 中医康复临床实践指南脑卒中.docx VIP
- 建立公司危化品应急救援队伍的意义与方法.pptx VIP
文档评论(0)