OpenNI+Kinect:利用自带类实现简单手势识别教程

需积分: 11 1 下载量 157 浏览量 更新于2024-09-13 收藏 344KB PDF 举报
本篇学习笔记主要介绍了如何利用Kinect和OpenNI进行简单手势识别的过程。OpenNI是一个跨平台的开源框架,专门用于处理微软Kinect的传感器数据,尤其是其深度信息,这对于手势识别至关重要。作者在Qt Creator环境中,结合OpenNI 1.5.4.0、Qt 4.8.2以及OpenCV 2.4.2版本,对COpenNI类进行了扩展,引入了一个公开对象GestureGenerator来处理手势识别任务。 在开发过程中,作者首先将GestureGenerator类放在了公共部分,以便于COpenNI类的对象能够访问并设置手势识别的相关属性,如识别的特定手势类型(如挥手、点击、举手和手移动)。初始化GestureGenerator时,通过`Create`函数创建了实例,并指定了需要检测的手势种类。 OpenNI的手势识别是基于事件驱动的,通过注册`GestureRecognizedRecognizedCB`和`GestureProgressProgressCB`回调函数,当特定手势发生或进行中时,程序会触发这些回调。这个过程类似于Qt中的信号与槽机制,允许开发者定制手势触发后的响应逻辑。 设置回调函数原型为: ```cpp XnStatus RegisterGestureCallbacks(GestureRecognizedRecognizedCB gestureRecognizedCB, GestureProgressProgressCB gestureProgressCB, void* pCookie, XnCallbackHandle& hCallback); ``` 用户需要提供两个回调函数指针(`gestureRecognizedCB`和`gestureProgressCB`)以及一个自定义数据指针(`pCookie`),并且接收返回的`hCallback`值,用于后续的回调管理。 然而,作者提到实验结果显示OpenNI自带的类在手势识别效果方面并不理想,这可能意味着需要进一步优化算法或调整参数,或者结合其他技术(如深度学习)以提升识别精度。尽管初始的实现较为基础,但这篇文章为入门者提供了一个使用OpenNI进行简单手势识别的基本框架,后续的研究和改进可以在此基础上展开。