资源描述:
《kinect开发教程三:利用openni进行手势识别》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、这是第二个范例,小斤将介绍如何使用OpenNI让Kinect识别出手势,并显示输出。目前版本的OpenNI支持四种手势:RaiseHand,Wave,Click和MovingHand,分别代表手的“举起”,“挥动”,“前推”和“移动”四种动作。值得一提的是,当前微软官方的KinectSDK还不支持手势识别,也可以说是使用OpenNI的好处之一吧。有了手势识别后,其实可以利用Kinect做一些实际的东东,比如利用鼠标键盘控制一些应用程序等等。闲话不说了,速度搞起。代码一部分参考了Heresy童鞋的文章,手势部分写得很完备了,在巨人的肩膀上,小斤使用OpenCV进行显示,红色点表示手的位置轨迹,
2、蓝色实心圈表示前推的位置,黄色直线表示手挥动的轨迹(从起点到终点)。[cpp]viewplaincopy1#include2#include3#include"opencv/cv.h"4#include"opencv/highgui.h"5#include67usingnamespacestd;8usingnamespacecv;910//outputforXnPoint3D11ostream&operator<<(ostream&out,constXnPoint3D&rPoint)12{13out<<"("<3、nt.X<<","<4、DPosition<<"to"<<*pEndPosition<X));13imgStartY=(int)(480/2-(pIDPosition->Y));14imgEndX=(int)(640/2-(pEndPosition->X));15imgEndY=(int)(480/2-(pEndPosition->Y));1617IplIm
5、age*refimage=(IplImage*)pCookie;18if(strcmp(strGesture,"RaiseHand")==0)19{20cvCircle(refimage,cvPoint(imgStartX,imgStartY),1,CV_RGB(255,0,0),2);21}22elseif(strcmp(strGesture,"Wave")==0)23{24cvLine(refimage,cvPoint(imgStartX,imgStartY),cvPoint(imgEndX,imgEndY),CV_RGB(255,255,0),6);25}26elseif(strcmp
6、(strGesture,"Click")==0)27{28cvCircle(refimage,cvPoint(imgStartX,imgStartY),6,CV_RGB(0,0,255),12);29}3031cvSetImageROI(refimage,cvRect(40,450,640,30));32CvFontfont;33cvInitFont(&font,CV_FONT_VECTOR0,1,1,0,3,5);34cvSet(refimage,cvScalar(255,255,255));35sprintf(locationinfo,"From:%d,%dto%d,%d",(int)p
7、IDPosition->X,(int)pIDPosition->Y,(int)(pEndPosition->X),(int)(pEndPosition->Y));36cvPutText(refimage,locationinfo,cvPoint(30,30),&font,CV_RGB(0,0,0));37cvResetImageROI(refimage);38}3940voidclearImg(IplImag