Windows 7 + QT + OpenNI + Kinect + OpenCV 环境配置
Kinect开发教程
Kinect开发Windows7 环境的 Kinect SDK Beta(开发工具包),需要Microsoft .NET Framework 4.0、Microsoft Visual Studio 2010,使用 C++, C#, VB 等开发语言。
硬件要求是双核 2.66GHz CPU,至少 2GB 内存建议 4GB,支持 DirectX 9 的显卡。
微软发布的Kinect SDK包含以下三方面功能:原始传感器流:该功能可以从深度传感器、彩色摄像头传感器、麦克风等传感器中获取原始数据流,并可以使开发者在由Kinect传感器中所产生的低层次的数据流基础上进行开发。
骨骼追踪技术:该功能可以追踪一至两名用户在Kinect区域内活动时的骨骼图像,并可以为开发者提供更方便的途径开发动作应用程序。
高级音频功能:音频处理功能包括高级的噪音处理、回声消音,并可以辨别当前发声源,以及将这些数据信息导入Windows语音识别应用程序中。
安装环境:首先来说,Kinect for Windows SDK的下载地址:/en-us/um/redmond/projects/ kinectsdk/download.aspxKinect SDK目前只支持Windows 7,分为x86和x64两个版本。
开发工具方面还需要.NET Framework 4.0和Visual Studio 2010 (最低Express版本)的支持。
Kinect SDK的视频开发教程:/Series/KinectSDKQuickstarts?sort=r ecent#tab_sortBy_recentKinect SDK的开发指南:/en-us/um/redmond/projects/kin ectsdk/guides.aspxKinect SDK的官方论坛:/Forums/en-US/kinectsdk/thr eads硬件设备的需求是:Kinect for Xbox 360 sensor和Xbox 360 Kinect AC Adapter/ Power Supply。
win7 qtcreator+opencv安装与配置
Win7(X64/x86)Qt creator OpenCV2.3配置(v2.0)guo8113说明:对Qt creator、Opencv、mingw不做解释,不懂自己查资料1、需要的软件:(所有软件均可联系本人)QtCreator2.3下载地址:qt官网qt-win-opensource-4.8.4-mingw(qt官网下载)MinGW-gcc440_1(经测试3.X的版本是安装不成功的,我在这上面最少浪费了半天时间)OpenCV-2.3.1-win-superpackcmake-2.8.10.2-win32-x86/cmake/resources/software.html2、软件安装:所有软件安装到C盘根目录下,切记不可有中文目录⏹解压或安装MinGW-gcc440_1,至C盘c:\mingw添加系统环境变量“计算机->右键属性->高级系统设置-》高级”在系统环境变量新建:变量名mingw值C:\mingw⏹安装cmake⏹安装opencv⏹安装qt和qtcreator3、编译与安装3.1 Cmake生成opencvmakefile打开cmake配置源码与安装路径源码路径要包括以下内容目标路径笔者设置为c:\Qt\opencv23.2配置:configure:在下面的选择框选择mingw makefiles,点击finish3.3生成:点击generate3.4进入设置好的目标路径执行在cmd里输入cd c:\Qt\OpenCV2输入:mingw32-make进行编译等待40分钟左右编译完成:执行mingw32-make install进行安装:安装完之后将opencv的bin目录添加到环境变量4配置QTcreator打开QTcreator,工具-选项配置几项如下图:编译器mingwQTCmake5.QT creator配置把c:\Qt\OpenCV2目录下install文件夹中的所有文件包含bin lib include 文件夹,拿到c:\Qt\OpenCV2下(这几个是必须的,其他的可以删掉)。
Kinect动作捕捉系统介绍
Kinect动作捕捉系统介绍一、关于Kinect1、简介Kinectfor Xbox 360,简称Kinect,是由微软开发,应用于Xbox 360 主机的周边设备。
它让玩家不需要手持或踩踏控制器,而是使用语音指令或手势来操作Xbox360 的系统界面。
它也能捕捉玩家全身上下的动作,用身体来进行游戏,带给玩家“免控制器的游戏与娱乐体验”。
其在2010年11月4日于美国上市,建议售价149美金。
Kinect在销售前60天内,卖出八百万部,目前已经申请金氏世界记录,成为全世界销售最快的消费性电子产品。
2012年2月1日,微软正式发布面向Windows系统的Kinect版本“Kinect for Windows”,建议售价249美金。
Kinect有三个镜头,中间的镜头是RGB 彩色摄影机,用来采集彩色图像。
左右两边镜头则分别为红外线发射器和红外线CMOS 摄影机所构成的3D结构光深度感应器,用来采集深度数据(场景中物体到摄像头的距离)。
彩色摄像头最大支持1280*960分辨率成像,红外摄像头最大支持640*480成像。
Kinect还搭配了追焦技术,底座马达会随着对焦物体移动跟着转动。
Kinect也内建阵列式麦克风,由四个麦克风同时收音,比对后消除杂音,并通过其采集声音进行语音识别和声源定位。
2013年11月22日,随着xbox one的发售,kinect也更新为2.0版本。
二代和一代的主要区别在于它是专门为XboxOne设计,外形作了改进,精度更高,在捕捉在捕捉肢体动作和表情的基础上,增加了手指动作捕捉和心跳感应。
强化了分辨率至1080P,每秒处理的数据最多达2GB,镜头捕捉角度也增加至60%。
2、硬件功能3、安装部署除自定义应用程序处理外,对于将大量使用Kinect for Windows v2 身体跟踪的应用程序,建议使用下面的计算机配置作为参考。
该方案允许kinect发挥绝佳的性能,同时仍然能容纳附加的应用程序处理并维持最佳帧速率。
Kinect+OpenNI学习笔记之2(获取kinect的颜色图像和深度图像)
Kinect+OpenNI学习笔记之2(获取kinect的颜色图像和深度图像)前言网上有不少使用Qt做界面,OpenNI为库来开发kinect。
或许大家的第一个问题就是询问该怎样使用Kinect来获取颜色信息图和深度信息图呢?这一节就是简单来回答这个问题的。
开发环境:QtCreator2.5.1+OpenNI1.5.4.0+Qt4.8.2实验说明:在使用OpenNI来驱动读取kinect数据时,我们需要了解context object这个名词。
查看了下OpenNI UserGuide文档,简单翻译下这个名词的意思:Context是openNI中一个主要的object,它掌握了OpenNI使用过程中应用程序的全部状态,以及这些状态的prodection chains,一个应用程序有多个context,但是这些context之间不能共享信息。
例如一个中间件节点不能使用另一个context的驱动节点。
Context在使用前必须被立即初始化,因此此时所有嵌入的模块被下载和分析。
为了释放context的内存,应用程序需调用shutdown程序。
虽然翻译得不准确,但是它的大概意思就是告诉我们在驱动kinect时,需要用到context这个类,且我们需要安装一定顺序去使用,这与一些常见的库驱动差不多,比如opengl,这些都需要什么初始化啊,设置属性啊等。
因此我们只需要直接去看懂他人的一个工程实例就ok了。
好了,本文参考Heresy的教程中的源码写的。
在新建好工程文件后,需要包含XnCppWrapper头文件,且需在Qt工程中设置好头文件目录和库文件目录。
使用OpenNI读取颜色图和深度图的步骤如下(这个是程序的核心部分):1. 定义一个Context对象,并调用该对象的Init()方法来进行初始化。
2. 定义一个XnMapOutputMode格式对象,设置好分图像分辨率和帧率。
3. 定义颜色图和深度图的节点对象,并用其Create()方法来创建,参数为Context对象.4. 设置颜色和深度图的输出模式,调用的方法是SetMapOutputMode();参数为步骤2中定义和设置好了的XnMapOutputMode对象。
win7下配置OpenCV的Qt开发环境
[OpenCV] -- win7下配置OpenCV的Qt开发环境Email : hahayacoder@0 编译、配置OpenCV的工程相当曲折,编译OpenCV不下5次,一开始还以为是自己的配置、编译步骤有问题,后来发现原来是自己电脑装的Qt Creator版本有点低,里面的MingW版本较低,而OpenCV下载的是最新版本,最新版本的OpenCV需要高版本的MingW。
最后果断换成高版本Qt Creator,终于编译成功。
1 下载所需工具(1)Qt Creator 下载地址 (建议下载最新版本,因为里面带的MinGW版本较高,我最开始使用Qt 4.7.4编译OpenCV-2.4.4一直报错,后来换成Qt 5.0.1编译成功)(2)OpenCV 下载地址/(不建议下载最新版本,最新版本的编译需要高版本的MinGW,不然在执行mingw32-make命令会报错)(3)CMake 下载地址/cmake/resources/software.html2 安装Qt Creator,过程很简单,一直下一步就OK3 安装OpenCV,设置解压路径就OK4 安装CMake,过程同样很简单(注意:(1)安装路径不能有中文和空格(2)勾选加入所有境变量中)5 目前最新的OpenCV版本,安装之后的目录下面有源码和个版本的lib和dll,不过为避免出现问题,还是自己编译6 将C:\Qt\Qt5.0.1\Tools\MinGW\bin加入系统的Path环境变量(假设Qt Creator安装在C盘)7 打开CMake,使用CMake编译OpenCV。
配置源码路径与生成的目标路径(1)源码路径:要选择OpenCV安装目录下含有如下文件的文件夹(2)目标路径:可以随意设置8 点击Configure配置按钮。
在弹出的对话框中选择MinGW makefiles,其余选项保持默认,点击Finish按钮,开始编译9 CMake编译结束界面如下图,勾选生成列表中的WITH_OPENGL和WITH_QT两项,其他项最好不要改动有一点需要注意一下,第二次configure的时候,会报错,说QT5CORE_DIR等等找不到,这一条上述教程里面没有说,我搜索了一下之后发现这个方法可以解决这个问题点击Cmake的entry,然后添加如下的信息,左边不变,右边为你的qt5的路径。
Kinect开发教程五:OpenNI获取人体骨架
临近毕业,小斤最近一直忙活着相关事宜,教程这边也搁浅了一阵。
前几篇教程介绍了OpenNI的一些基本范例以及手势应用,但如果光用Kinect识别一些手势,总有点杀鸡用牛刀的感觉。
在大部分体感应用中,获取骨架的步骤都不可缺少,这也是小斤一直想写的专题。
好了,废话不多说了,让我们进入正题吧!在OpenNI库的enum XnSkeletonJoint中,定义了24个人体的关节,如下:XN_SKEL_HEAD = 1, XN_SKEL_NECK = 2, XN_SKEL_TORSO = 3, XN_SKEL_WAIST = 4, XN_SKEL_LEFT_COLLAR = 5,XN_SKEL_LEFT_SHOULDER = 6,XN_SKEL_LEFT_ELBOW = 7, XN_SKEL_LEFT_WRIST= 8,XN_SKEL_LEFT_HAND = 9,XN_SKEL_LEFT_FINGERTIP =10,XN_SKEL_RIGHT_COLLAR =11, XN_SKEL_RIGHT_SHOULDER =12,XN_SKEL_RIGHT_ELBOW =13, XN_SKEL_RIGHT_WRIST =14,XN_SKEL_RIGHT_HAND =15,XN_SKEL_RIGHT_FINGERTIP =16,XN_SKEL_LEFT_HIP =17, XN_SKEL_LEFT_KNEE=18,XN_SKEL_LEFT_ANKLE =19, XN_SKEL_LEFT_FOOT=20,XN_SKEL_RIGHT_HIP =21, XN_SKEL_RIGHT_KNEE =22,XN_SKEL_RIGHT_ANKLE =23, XN_SKEL_RIGHT_FOOT =24小斤试下来,目前可使用的有14个关节,如下图:先上代码:1#include <stdlib.h>2#include <iostream>3#include <vector>45#include <XnCppWrapper.h>6#include <XnModuleCppInterface.h>7#include "cv.h"8#include "highgui.h"910using namespace std;11using namespace cv;1213//#pragma comment (lib,"cv210")14//#pragma comment (lib,"cxcore210")15//#pragma comment (lib,"highgui210")16//#pragma comment (lib,"OpenNI")1718//【1】19xn::UserGenerator userGenerator;20xn::DepthGenerator depthGenerator;21xn::ImageGenerator imageGenerator;2223/*24 XN_SKEL_HEAD = 1, XN_SKEL_NECK = 2,25 XN_SKEL_TORSO = 3, XN_SKEL_WAIST = 4,26 XN_SKEL_LEFT_COLLAR = 5, XN_SKEL_LEFT_SHOULDER = 6,27 XN_SKEL_LEFT_ELBOW = 7, XN_SKEL_LEFT_WRIST = 8,28 XN_SKEL_LEFT_HAND = 9, XN_SKEL_LEFT_FINGERTIP =10,29 XN_SKEL_RIGHT_COLLAR =11, XN_SKEL_RIGHT_SHOULDER =12,30 XN_SKEL_RIGHT_ELBOW =13, XN_SKEL_RIGHT_WRIST =14,31 XN_SKEL_RIGHT_HAND =15, XN_SKEL_RIGHT_FINGERTIP =16,32 XN_SKEL_LEFT_HIP =17, XN_SKEL_LEFT_KNEE =18,33 XN_SKEL_LEFT_ANKLE =19, XN_SKEL_LEFT_FOOT =20,34 XN_SKEL_RIGHT_HIP =21, XN_SKEL_RIGHT_KNEE =22,35 XN_SKEL_RIGHT_ANKLE =23, XN_SKEL_RIGHT_FOOT =24 36*/37//a line will be drawn between start point and corresponding end point 38int startSkelPoints[14]={1,2,6,6,12,17,6,7,12,13,17,18,21,22};39int endSkelPoints[14]={2,3,12,21,17,21,7,9,13,15,18,20,22,24};4041// callback function of user generator: new user42void XN_CALLBACK_TYPE NewUser( xn::UserGenerator& generator, XnUserID user,void* pCookie )43{44 cout << "New user identified: " << user << endl;45//userGenerator.GetSkeletonCap().LoadCalibrationDataFromFile( user, "UserCalibration.txt" );46 generator.GetPoseDetectionCap().StartPoseDetection("Psi", user); 47}4849// callback function of user generator: lost user50void XN_CALLBACK_TYPE LostUser( xn::UserGenerator& generator, XnUserIDuser,void* pCookie )51{52 cout << "User " << user << " lost" << endl;53}5455// callback function of skeleton: calibration start56void XN_CALLBACK_TYPE CalibrationStart( xn::SkeletonCapability&skeleton,XnUserID user,void* pCookie )57{58 cout << "Calibration start for user " << user << endl;59}6061// callback function of skeleton: calibration end62void XN_CALLBACK_TYPE CalibrationEnd( xn::SkeletonCapability&skeleton,XnUserID user,XnCalibrationStatus calibrationError,void* pCookie )63{64 cout << "Calibration complete for user " << user << ", ";65if( calibrationError==XN_CALIBRATION_STATUS_OK )66 {67 cout << "Success" << endl;68 skeleton.StartTracking( user );69//userGenerator.GetSkeletonCap().SaveCalibrationDataToFile(user, "UserCalibration.txt" );70 }71else72 {73 cout << "Failure" << endl;74//For the current version of OpenNI, only Psi pose is available75((xn::UserGenerator*)pCookie)->GetPoseDetectionCap().StartPoseDetection( "Psi", user );76 }77}7879// callback function of pose detection: pose start80void XN_CALLBACK_TYPE PoseDetected( xn::PoseDetectionCapability& poseDetection,const XnChar* strPose,XnUserID user,void* pCookie)81{82 cout << "Pose " << strPose << " detected for user " << user << endl;83 ((xn::UserGenerator*)pCookie)->GetSkeletonCap().RequestCalibration( user, FALSE );84 poseDetection.StopPoseDetection( user );85}8687void clearImg(IplImage* inputimg)88{89 CvFont font;90 cvInitFont( &font, CV_FONT_VECTOR0,1, 1, 0, 3, 5);91 memset(inputimg->imageData,255,640*480*3);92}939495int main( int argc, char** argv )96{97char key=0;98int imgPosX=0;99int imgPosY=0;100101// initial context102 xn::Context context;103 context.Init();104 xn::ImageMetaData imageMD;105106 IplImage* cameraImg=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3); 107 cvNamedWindow("Camera",1);108109// map output mode110 XnMapOutputMode mapMode;111 mapMode.nXRes = 640;112 mapMode.nYRes = 480;113 mapMode.nFPS = 30;114115// create generator116 depthGenerator.Create( context );117 depthGenerator.SetMapOutputMode( mapMode );118 imageGenerator.Create( context );119 userGenerator.Create( context );120121//【2】122// Register callback functions of user generator123 XnCallbackHandle userCBHandle;124 userGenerator.RegisterUserCallbacks( NewUser, LostUser, NULL, userCBHandle );125126//【3】127// Register callback functions of skeleton capability128 xn::SkeletonCapability skeletonCap = userGenerator.GetSkeletonCap(); 129 skeletonCap.SetSkeletonProfile( XN_SKEL_PROFILE_ALL );130 XnCallbackHandle calibCBHandle;131 skeletonCap.RegisterToCalibrationStart( CalibrationStart,&userGenerator, calibCBHandle );132 skeletonCap.RegisterToCalibrationComplete( CalibrationEnd,&userGenerator, calibCBHandle );133134//【4】135// Register callback functions of Pose Detection capability136 XnCallbackHandle poseCBHandle;137userGenerator.GetPoseDetectionCap().RegisterToPoseDetected( PoseDetected,&userGe nerator, poseCBHandle );138139140// start generate data141 context.StartGeneratingAll();142while( key!=27 )143 {144 context.WaitAndUpdateAll();145146 imageGenerator.GetMetaData(imageMD);147 memcpy(cameraImg->imageData,imageMD.Data(),640*480*3);148 cvCvtColor(cameraImg,cameraImg,CV_RGB2BGR);149// get users150 XnUInt16 userCounts = userGenerator.GetNumberOfUsers();151if( userCounts > 0 )152 {153 XnUserID* userID = new XnUserID[userCounts];154 userGenerator.GetUsers( userID, userCounts );155for( int i = 0; i < userCounts; ++i )156 {157//【5】158// if is tracking skeleton159if( skeletonCap.IsTracking( userID[i] ) )160 {161 XnPoint3D skelPointsIn[24],skelPointsOut[24];162 XnSkeletonJointTransformation mJointTran;163for(int iter=0;iter<24;iter++)164 {165//XnSkeletonJoint from 1 to 24166skeletonCap.GetSkeletonJoint( userID[i],XnSkeletonJoint(iter+1), mJointTran ); 167 skelPointsIn[iter]=mJointTran.position.position;168 }169depthGenerator.ConvertRealWorldToProjective(24,skelPointsIn,skelPointsOut);170171//【6】172for(int d=0;d<14;d++)173 {174 CvPoint startpoint =cvPoint(skelPointsOut[startSkelPoints[d]-1].X,skelPointsOut[startSkelPoints[d]-1 ].Y);175 CvPoint endpoint =cvPoint(skelPointsOut[endSkelPoints[d]-1].X,skelPointsOut[endSkelPoints[d]-1].Y) ;176177 cvCircle(cameraImg,startpoint,3,CV_RGB(0,0,255),12);178 cvCircle(cameraImg,endpoint,3,CV_RGB(0,0,255),12);179cvLine(cameraImg,startpoint,endpoint,CV_RGB(0,0,255),4);180 }181 }182 }183delete [] userID;184 }185 cvShowImage("Camera",cameraImg);186187 key=cvWaitKey(20);188189190 }191// stop and shutdown192 cvDestroyWindow("Camera");193 cvReleaseImage(&cameraImg);194 context.StopGeneratingAll();195 context.Shutdown();196197return 0;198}【1】对于人体骨架的获取,小斤声明了UserGenerator这个生成器,UserGenerator具有检测新的User(以下称为人物)出现或者离开,获取画面中的人物数,人物位置信息,与上一教程介绍的GestureGenerator类似,通过注册回调函数的方式,一旦其检测到了动静(如人物出现),那么相应的回调函数就会被调用。
Kinect for Windows 产品手册
不同行业的解决方案
案例 1
零售行业:搭建试衣模拟环境
Kinect for Windows 为零售业搭建逼真实时 的模拟环境。通过 Kinect Fusion 的扫描特 性,让消费者能摆脱反复试衣的麻烦,开 拓了消费者购物的新体验。 查看相关视 频
案例 3
教育行业:轻松、快乐的学习环境
Kinect for Windows 为学生学习搭建的 模拟环境,让学生沉浸在活泼、生动有 趣的教学场景中,丰富了想象力 ,提高了 创造力和动手能力。 查看相关视 频
硬件要求
• 32 位 (x86) 或 64 位 (x64) 处理器 • 双核 2.66-GHz 或更快的处理器 • 供 Kinect for Windows 传感器专用的 USB
2.0 总线 • 2GB RAM
操作系统要求
• 要求在 Windows 7, Windows 8, Windows Embedded 7 或 Windows Embedded 8 环境下使用
中国建议零售价:RMB 1930 元 Kinect for Windows 硬件包括一年的质保,支持和在访问基于语音和人脸追踪的软件更新。传感器不附带任何软件, 并且只可以通过面向 Kinect for Windows 开发的应用程序才能操作使用; Kinect for Windows SDK 是授权于用户,而非售卖!使用 SDK 要求接受在产品手册和 上的 软件许可协议。使用 Kinect for Windows 传感器需接受这些条款。 您不得复制或逆向改变该软件。本产品不适用于 Xbox 360® 视频游戏和娱乐系统。保修条款见随带产品手册和 。
• 利用 Kinect for Windows SDK 和相关运行软件开发应用程序;注:传感器设备无内置软件,并且只可Байду номын сангаас通过面向
Microsoft Kinect SDK和PrimeSense OpenNI 的区别
Microsoft Kinect SDK 和PrimeSense OpenNI 的区别After playing with both the Microsoft Kinect SDK and the PrimeSense OpenNI SDK here are some of my thoughtsNote that the Microsoft’s SDK version is the Beta version, so things may change when the final one is released)Microsoft’s Kinect SDK (Beta)pro: 优点∙support for audio 支持音频∙support for motor/tilt 支持马达∙full body tracking: 全身追踪∙does not need a calibration pose 不需要标定姿势(投降姿势)∙includes head, hands, feet, clavicles包括头,手,脚和锁骨∙seems to deal better with occluded joints 看起来处理关节闭塞更好些supports multiple sensors 支持多传感器(多台Kinect)single no-fuss installer 简化安装(安装更容易)SDK has events for when a new Video or new Depth frame is available 当新的视频或深度图有效时,SDK会有可用事件con: 缺点∙licensed for non-commercial use only 非商用(商业需要付费)∙only tracks full body (no mode for hand only tracking) 只能追踪全身(不包含特定的追踪模式:例如只追踪手)∙does not offer alignment of the color&depth image streams to one another yet although there are features to align individual coordinates∙and there are hints that support may come laterfull body tracking: 全身追踪only calculates positions for the joints, not rotations 关节只有坐标数据,没有旋转数据only tracks the full body, no upperbody or hands only mode只能追踪全身,不包含特定的追踪模式:例如只追踪手或上半身∙seems to consume more CPU power than OpenNI/NITE (not properly benchmarked) 和OpenNI/NITE相比,看起来更消耗CPU(没有采用适当的基准)no gesture recognition system 不包含手势识别系统no support for the PrimeSense and the ASUS WAVI Xtion sensors? (can anyone confirm this?) 不支持PrimeSense和华硕的WAVI Xtion 硬件平台only supports Win7 (x86 & x64) 只支持Win7(32位和64位)no support for Unity3D game engine 不支持Unity3D游戏引擎no built in support for record/playback to disk 不支持数据记录或回放到硬盘no support to stream the raw InfraRed video data 不支持红外线视频数据流SDK does not have events for when new user enters frame, leaves frame etc SDK没有此类发生事件,例如当一个用户被侦测到或用户丢失等等。
Kinect API总结
以下是Kinect for Windows SDK能够实现的一些特性示例:·通过骨架追踪系统识别并追踪1-2个视野范围内的活动用户;·通过能获取彩色图像数据流和深度图像数据流的XYZ-depth camera来确定物体到感应器之间的距离;·通过四元麦克风阵列捕获消除了噪声和回声的声音信息或者在捕获声音的同时确定声源位置;·通过整合了Microsoft Speech recognition API的声音捕获系统进行语音识别;应用层三大组件:NUI API:SDK的核心,用来处理彩色图像流、深度图像数据、骨骼跟踪和控制/管理Kinect设备等。
Kinect Audio DMO:提供波束成形和音源定位功能。
Windows Speech SDK:提供音频、语音、多媒体API集以及微软语音识别功能。
NUI API支持“流处理”和“设备管理”的功能,具体包括:1.Kinect传感器与计算机的连接、访问、关闭。
2.访问从Kinect传感器上传输的图像和深度数据流。
3.通过对图像和深度数据的处理来进行骨骼跟踪。
NUI API具有设备枚举的方法,可以判断已连接设备数量。
应用程序可以通过枚举来获得各个Kinect设备的名称,单独使用或设置其属性。
Kinect麦克风阵列主要API包括:DMO(DirectX Media Object,DirectX 多媒体对象)和MSAPI语音识别(Microsoft Speech Recognition API)。
应用程序使用Audio API可以:1、高质量的音频采集和以音频控制。
Kinect Audio API内嵌一系列的算法来确保接收音频品质,包括降噪、自动增益控制和回声消除等处理。
2、波束成形和程序初始化,波束定位。
Windows Speech SDK包括:Microsoft Speech API、Speech Platform SDK 和Kinect for Windows Runtime Language Pack(运行语言包)。
Kinect+OpenNI学习笔记之6(获取人体骨架并在Qt中显示)
前言MS的kinec SDK和OpenNI都提供了人体骨骼跟踪的算法,人体骨骼跟踪算法在kinect人体行为识别中非常重要,该识别过程通常被用来作为行为识别的第一步,比如说,通过定位人体中的骨骼支架,可以提取出人手的部位,从而可以把手的部分单独拿出来分析,这样就达到了手势的定位,而后面的手势识别则可以在刚刚定位出的领域进行处理。
总而言之,一套有效的人体骨架追踪算法在kinect的一系列应用中非常有用,不过MS SDK和OpenNI虽然都提供了该算法类的直调用,但是其源码并没有开放,毕竟这是人家最核心的东东。
开发环境:QtCreator2.5.1+OpenNI1.5.4.0+Qt4.8.2实验说明在老版本的OpenNI中,要对人进行骨架追踪,需要人先摆出PSI的姿势,然后系统根据该姿势进行骨骼校正,待校正完成后才进行骨骼的跟踪,其流程图可以参考下面的图:由图可以看出,其完成骨骼跟踪主要分为3个部分,首先需检测到人体,然后需要固定的PSI姿势来对人体的姿势进行校正,待姿势校正完成后,才能进行人体骨骼的追踪。
如果程序开发者用代码实现该过程则可以参考hersey的文章透过OpenNI / NITE 分析人体骨架(上)和透过OpenNI / NITE 分析人体骨架(下),作者在这2篇文章详细介绍了老版本的人体骨架的OpenNI实现。
在新版本OpenNI1.5以后,人体骨架追踪算法更改了不少,其中最大的特点就是骨架跟踪过程中少了姿势校正的那一步骤,新版本中只需要人体站起来就可以进行跟踪了,使用起来方便很多,程序开发也简单不少。
另外人体骨骼跟踪的效果也提高了不少,一旦骨骼追踪成功后,即使人体没有保持站立姿势有时候也还是可以继续跟踪的。
新版本的人体骨骼跟踪算法使用流程图如下:下面来看看程序中的Capability,它不同于前面文章的generator:在进行骨架的判断和姿态检测是需要用到OpenNI延伸的功能,与这种延伸功能相关的类可以称作为Capability。
在win7 64位下编译Qt4.8.7+webkit+openssl +VS2013
在win7 64位下编译Qt4.8.7+webkit+openssl +VS2013前言windows,linux上,编译很过qt源码,不同版本的。
但确实第一次在64位系统上,编译qt4.8.7,还必须要加上webkit和openssl的选项编译。
网络流传webkit编译极容易出错,而且很大,很耗时。
但是没办法,3D slicer [v4.5]的开源代码,在windows上目前只支持VS2013+qt4.8.7的代码。
折磨时间已过,现在给大家分享一下。
三、编译在windows开始菜单的Microsoft Visual Studio 2013中的Visual Studio Tools里面找到“VS2013 x64 本机工具命令提示”,以管理身份运行它。
在窗口中输入:cd E:\source\qt-everywhere-opensource-src-4.8.7 E:E:是切换一下盘符3.1 configure代码:configure -opensource -nomake examples -nomake demos -platform win32-msvc2013 -prefix "C:/Qt/4.8.7" -debug-and-release -shared -webkit -openssl -IC:/workspace/source/openssl-1.0.1t/inc32 -L C:/workspace/source/openssl-1.0.1t/out32dll备注:a)如果需要静态链接Qt库,就在后面追加-static 参数;b)要是出现configure不是外部或内部命令。
肯定是你的窗口没进入源码目录。
上面的E:就是切换到E盘;c) -webkit -openssl是slicer必须要的,否则在slicer源码编译的时候会出错。
不打算开发 webkit 核心的浏览器人,建议不要编译webkit,此物极度耗时,体积也不小。
KinectOpenNI学习笔记之3(获取kinect数据并在Qt中显示类设计)
Kinect+OpenNI学习笔记之3(获取kinect的数据并在Qt中显示的类的设计)前言在上一篇文章Kinect+OpenNI学习笔记之2(获取kinect的颜色图像和深度图像) 中,已经介绍了怎样使用OpenNI来获取Kinect的深度数据和颜色数据,并将获取到的结果在Qt中显示,不过那个代码是写在同一个cpp文件中,以后用到的时候不能讲这些显示的基本过程单独拿出来,比较麻烦。
所以这节主要是将OpenNI获取图像的流程以及Qt显示这些图像的结果分开为了2个类来写,方便以后工程的直接拷贝。
开发环境:实验说明COpenNI这个类主要是初始化kinect设备,并获取深度图像和颜色图像,参加上一篇博客的初始化过程步骤,如果遇到错误,则有相应的错误处理过程。
CKinectReader类是将COpenNI 这个类读取到的结果显示在Qt的界面上的。
因此一个类是负责与硬件Kinect打交道,一个类是负责与人(界面显示)打交道的。
具体的过程见上篇文章的分析和后面的代码。
这里发现一个小问题,与kinect有关的工程如果改变了代码,则在每次编译前最好clean一下,因为有可能是与硬件设备相关,没有clean的工程和clean后的工程效果有时会不同。
C/C++知识点总结:在构造函数中可以使用冒号给类中的数据成员赋值,这样的好处就是可以给常量和引用变量赋值初始化赋值的效果。
类的私有成员只能是类内部的函数调用,连类的对象都不能去调用私有成员变量。
在类的内部使用qDebug(),cout等函数输出调试时是不行的。
隐式数据类型转换,如果是同种类型的数据进行四则运算,则得出的结果也是那种类型,如果其中有常数类型的数据常数参与,则得出的结果会自动转换成跟常数类型相同的类型。
如果一个类以单独一个cpp文件出现,在使用到该类的时候,直接include该cpp文件.实验结果在程序中设置了镜像和视觉校正,且将kinect感应不到深度信息的地方全部显示为不透明的黑色,因此你在图中看到的黑色部分就是kinect的深度盲区。
在Windows上安装Kinect(含+MMD+使用+Kinect+简易教学)
在Windows 上安装Kinect (含MMD 使用Kinect 简易教学)大概介绍过微软的Kinect 这个新东西了,它的深度摄影机、以及他的衍生应用,在最近也算是已经被发扬光大,应用非常多了。
而这一篇呢,就来简单讲一下,要怎样才能把Kinect 装到PC 上,在Windows 操作系统下使用吧。
基本上,Kinect 的信号接头虽然是特殊的XBox 360 AUX 接头,但是它实际上只是标准USB 加上额外的电源而已;同时,在台湾买到的标准配件里,也有附上把AUX 接头转为USB + 电源的线,所以要把Kinect 接到PC 上,并不需要做任何硬件、线路上的修改。
下方左图就是他的AUX 接头,而下方右图就是官方附的转接线,可以把AUX 接头转换成一个标准USB 接头和一个电源插座。
但是由于微软官方并没有提供给Windows 用的驱动程序,所以直接接上去后,是没办法直接使用的。
为了要让Kinect 能让Windows 上正常运作,就要有修改过、给Kinect 用的驱动程序才行了~而这些驱动程序基本上都不是官方的,也不只一种;目前比较有名的,应该是OpenKinect 的libfreenect(网页)和OpenNI(网页)加上特制版的SensorKinect(网页)这样的架构。
而Heresy 这边是采用OpenNI 这个架构来做的。
使用这个架构的话,需要准备三样东西:1.OpenNI1.OpenNI 的基础Framework。
他基本上是一个跨平台的「自然互动」(Natural Interaction)开放原始码架构(open source framework),提供了一组标准的API 来针对不同的装置(目前应该也只有Kinect)、中间件来做操作。
2.可以直接在OpenNI 的官方网站下载。
目前最新版本为1.0.0.23(档名应该是「OPENNI-Win32-1.0.0.23.exe」,直接下载链接)。
在win7 64位下编译Qt4.8.7+webkit+openssl +VS2013
在win7 64位下编译Qt4.8.7+webkit+openssl +VS2013前言windows,linux上,编译很过qt源码,不同版本的。
但确实第一次在64位系统上,编译qt4.8.7,还必须要加上webkit和openssl的选项编译。
网络流传webkit编译极容易出错,而且很大,很耗时。
但是没办法,3D slicer [v4.5]的开源代码,在windows上目前只支持VS2013+qt4.8.7的代码。
折磨时间已过,现在给大家分享一下。
三、编译在windows开始菜单的Microsoft Visual Studio 2013中的Visual Studio Tools里面找到“VS2013 x64 本机工具命令提示”,以管理身份运行它。
在窗口中输入:cd E:\source\qt-everywhere-opensource-src-4.8.7 E:E:是切换一下盘符3.1 configure代码:configure -opensource -nomake examples -nomake demos -platform win32-msvc2013 -prefix "C:/Qt/4.8.7" -debug-and-release -shared -webkit -openssl -IC:/workspace/source/openssl-1.0.1t/inc32 -L C:/workspace/source/openssl-1.0.1t/out32dll备注:a)如果需要静态链接Qt库,就在后面追加-static 参数;b)要是出现configure不是外部或内部命令。
肯定是你的窗口没进入源码目录。
上面的E:就是切换到E盘;c) -webkit -openssl是slicer必须要的,否则在slicer源码编译的时候会出错。
不打算开发 webkit 核心的浏览器人,建议不要编译webkit,此物极度耗时,体积也不小。
win7下qt安装及测试
1,先下载最新版的Qt Creator :/downloads/qt-creator-binary-for-windows 我的版本qt-creator-win-opensource-2.4.1双击安装,默认c:\Qt\,我也是。
2、在下载 SDK/downloads/windows-cpp我的版本qt-win-opensource-4.8.1-mingw双击安装,默认c:\Qt\指定mingw 在Qtcreator的mingw目录。
安装完如下:3、设置环境变量:我的电脑—属性—高级—环境变量,打开,在***用户(U)添加三条如下:PATHc:\Qt\qtcreator-2.4.1\mingw\bin;c:\Qt\4.8.1\binQMAKESPECc:\Qt\4.8.1\mkspecs\win32-g++QTDIRc:\Qt\4.8.1附图:弄完后重启或注销一下4、打开qt终端,执行命令检查是否成功:在命令行模式下分别输入输入gcc –vmake –vQmake-v看看能否找到附图:表明成功了,可以写程序了。
5,、简单程序:如果一切ok,可以在d盘下新建一个目录测试cd /d d: (这个win7就是很贱非要加上一个选项/d)cd test建立一个clock.cpp文件一个clock.h文件,内容如下面三个文件在命令行输入qmake -projectqmakemake然后就可以执行生成的文件test.exe了,还有如果不执行上面的环境变量会造成在qtcreate里面可以编译成功但是如果你直接到目录下找到那个exe文件执行时候会提示找不到wingw10.dll(妈的可恨,本文也是主要解决这个问题来着)...............................cd debugtest.exe最终效果是://clock.h#ifndef CLOCK_H#define CLOCK_H#ifndef ALARM_H#define ALARM_H#include<QApplication>#include<QTimer>#include<QLCDNumber>#include<QLabel>#include <QVariant>#include<QTimeEdit>#include<QPushButton>#include<QDialog>#include <QMessageBox>#include<QSystemTrayIcon>#include<QAction>#include<QMenu>class Clock:public QDialog{Q_OBJECTpublic:Clock(QWidget * parent=0);void init();void layout();void clock_connect();//connectvoid closeEvent(QCloseEvent *event); public slots:void clockChange();void mini();private:QTimer * timer;QLCDNumber * lcdNumber;//显示当前时间QPushButton *button;QSystemTrayIcon *trayIcon;QAction * restoreAct;QAction * quitAct;QMenu * trayIconMenu;//QRect rect;};#endif#endif // CLOCK_H//clock.cpp#include"clock.h"Clock::Clock(QWidget * parent):QDialog(parent) {init();layout();clock_connect();void Clock::init(){setWindowTitle("Clock");//设置标题setFixedSize(QSize(200,60));//固定大小timer=new QTimer;//控制lcd的时间刷新lcdNumber=new QLCDNumber;//显示当前时间lcdNumber->setFixedSize(QSize(150,50));//固定大小lcdNumber->setNumDigits(8);//显示八个数字,默认是显示5个数字lcdNumber->display(QTime::currentTime().toString("hh:mm:ss"));//设置格式,还有其他形式的button=new QPushButton("Quit");trayIcon=new QSystemTrayIcon;trayIcon->show();trayIcon->setIcon(QIcon("./images/qme.ico"));restoreAct=new QAction(QString::fromLocal8Bit("Show Clock"),this); //先定义然后在被trayIcon引用..... quitAct=new QAction(QString::fromLocal8Bit("Quit"),this);trayIconMenu=new QMenu;trayIconMenu->addAction(restoreAct);trayIconMenu->addAction(quitAct);trayIcon->setContextMenu(trayIconMenu);void Clock::layout(){lcdNumber->setParent(this);lcdNumber->show();button->setParent(this);button->move(160,10);button->resize(30,20);button->show();};void Clock::clock_connect(){connect(timer,SIGNAL(timeout()),this,SLOT(clockChange())); timer->start(1000);connect(button,SIGNAL(clicked()),this,SLOT(mini()));};// **************// 显示变化的时间// **************void Clock::clockChange()lcdNumber->display(QTime::currentTime().toString("hh:mm:ss"));}void Clock::mini(){hide();}void Clock::closeEvent(QCloseEvent *event){QMessageBox::information(0,"Quit","Are you sure exit the Application!"); }//end//main.cpp#include"clock.h"#include<QApplication>int main(int argc,char *argv[]){QApplication app(argc,argv);Clock clock;clock.show();return app.exec(); };//end。
[教程]如何在PC上使用Kinect
[教程]如何在PC上使用Kinect感谢活科技的投递自去年十一月Kinect首次推出后,除了销情十分理想外,亮点更是其令人难以置信技术潜力。
很多人已破解并自家开发了很多令人深刻的Kinect应用程式。
你也想试试在PC上使用Kinect吗?本文只是简单的入门,但都足够带你进入开发Kinect的世界!如果你有一台 Kinect,把Kinect连接到电脑不是那么难,看看下面的步骤:1. 连接Kinect连接 Kinect十分容易,只要你有盒装版本的Kinect,并有独立的电源。
你只需插上电源,并连接到Kinect,然后连接 USB电缆到电脑。
不幸的是,如果你买的是Xbox360 + Kinect版,是没有附带电源。
如果你想在PC上用你Kinect,你必须购买独立的电源供应器。
2. 安装PrimeSense OpenNI 要安装OpenNI,只要进入下载页 bit.ly/fyjLFy并滚动,直到您看到的链接,下载最新的不稳定建立的Windows。
下载并运行安装程序,不应该有任何惊喜在这里。
随着 OpenNI安装,你现在可以使用传感器 Kinect驱动程序。
前往传感器 Kinect GitHub的网页上下载bit.ly/gqWMY9并点击按钮,然后点击下载。
邮编按钮在下载来源。
你不会有任何实际编译源代码,虽然,只提取的内容的zip文件,然后定位到bin /目录,其中包含一个二进制 Windows安装程序。
通过快速运行安装程序。
在这一点上,你可以插入到计算机中的Kinect并执行一些快速的测试,以确保一切都步入正轨。
首先,当你插上Kinect,您的电脑应该认识到它是什么。
如果你去设备管理器,你会看到一个PrimeSensor类别,其中包括一个 Kinect电机和Kinect照相设备。
OpenNI需要配置才能正常运行,这是一组处理与 XML文件中的OpenNI / data目录。
幸运的是,传感器 Kinect zip文件包含了一些预配置文件供您使用。
kinectopenni学习笔记之10(不需要骨骼跟踪的人体多个手部分割)
Kinect OpenNI学习笔记之10(不需要骨骼跟踪的人体多个手部分割)前言这篇文章主要是介绍多个手部的分割,是在前面的博文:不需要骨骼跟踪的人体手部分割的基础上稍加改进的。
因为识别有的一个应用场合就是手势语言识别,而手势一般都需要人的2只手相配合完成,因此很有必要对人体的多个手部来进行分割。
实验说明其实本文中使用的还是OpenNI自带的一些算法实现的,因为OpenNI中自己本身就对每个手部有一个UserID的标志,所以我们每当检测到一只手时就可以把手的位置连同他的ID一起存下来,后面进行手势分割时按照检测到的不同手势分别进行分割即可。
其程序流程图如下所示:下面是本次实验特别需要注意的一些细节。
OpenNI知识点总结:一般情况下OpenNI的回调函数中都会有一个参数pCookie,该参数就可以解决前面的博文Kinect+OpenNI学习笔记之7(OpenNI自带的类实现手部跟踪)中提到的一个当时没有完美解决的问题:即回调函数与类的静态函数,类的静态变量这3者之间使用相互矛盾的问题。
那个时候因为在回调函数中需要使用静态成员变量,所以类中普通的非静态成员变量是不能够使用的,否则程序会编译时会报错误。
但是如果我们把这些普通变量在类中定义成了静态变量后,这些静态变量就属于类本身了,并不属于类的对象。
因此该变量在类的其它成员函数中是不能够被使用的。
这样就产生了矛盾,当时的解决方法是将这些变量不放在类中,而放在类外称为整个工程的全局变量。
虽然理论上可以解决问题,不过一个跟类有关的变量竟然不能够放在类的内部,听起来就像是个大笑话!这样的封装明显不合理。
幸运的是,现在因为回调函数传进来时有了pCookie这个变量,这样我们在回调函数中可以间接使用类的非静态成员变量了,使用这些变量既不需要定义为static类型,且也可以在类的成员函数中来进行初始化。
具体方法是将某个节点(比如说手部,人体,姿势等节点)的注册函数RegisterGestureCallbacks()中第3个参数设置为this指针,而不是null指针。
Kinect+OpenNI学习笔记之1(开发环境的建立)
Kinect+OpenNI学习笔记之1(开发环境的建立)前言一般的普通摄像机获取的是RGB彩色图像,在计算机视觉领域,很大一部分都是基于颜色图像来做处理的,取得了不少研究成果。
最近几年的深度图研究给计算机视觉和图像处理带来了更多的信息,因为所获取的图像多了一个维度的,通常也称之为RGBD图。
比较物美价廉的深度信息获取传感器有MS的Kinect,同时还有ASUS的Xtion。
这2种传感器都能较为准确的获得一定范围内物体的深度信息。
比如说Kinect的参数信息图如下:要想在视觉上达到AI的水平还有很长的路要走,深度信息的提供无疑给视觉处理多带来了一份希望,多了深度这一维的信息肯定是有用的,所以本人打算以后结合色彩信息和深度信息来做人体行为识别方面的研究。
废话不说,实验室有Kinect设备,因此需要搭建Kinect的开发环境,这里开发Kinect的驱动不是用的MS的SDK,而是采用开源的OpenNI(个人比较喜欢开源的东西)。
环境的搭建可以参考著名网友Heresy的系列文章,其中关于安装环境的搭建有一篇为:2012 OpenNI环境/Kinect安装教学。
该文章中写的非常详细,赞!Heresy的文章列表为:安装步骤另外这里是我个人的WinXP+Kinect+OpenNI+NITE+Qt开发环境搭建过程:1. 采用OpenNI开发套件。
OpenNI分为3个组件,OpenNI的本身框架,算法分析的中间件,以及硬件模块组。
下载OpenNI的官网为:根据自己电脑的类型和步骤2的SensorKinect版本,选择那3个下拉列表,出现文件后下载即可。
我这里选的是OpenNI Binarys+Unstable和32位的开发版本。
其中OpenNI文件名为:openni-win32-1.5.4.0-dev.msi,NITE文件名为:nite-win32-1.5.2.21-dev.msi,Sensor文件名为:sensor-win32-5.1.2.1-redist.msi。
OpenNI的安装方法
OpenNI 安装方法————在windows系统下通过一个星期的研究,终于搞清楚了OpenNI的安装过程,特此分享下本人的安装经验,OpenNI 的安装其实很简单。
首先,分清楚自己系统的版本,由于本人的能力有限,所以只找到Windows 和Linux系统下的SDK。
(在此稍微普及一下小知识,如何看自己的系统的版本,在‘我的电脑’右键—>‘属性’—>‘常规’选项卡里查看,在第二行里有“Microsoft Windows XP”字样,如果没有任何数字就为普通的32位的系统,如果是64位的系统会标出是professional xp64,当然,也可以在‘开始’—>‘运行’—>‘输入cmd’—>‘输入ver’也会有显示系统版本字样)接下来就要选择适合自己电脑的OpenNI的SDK版本,由于win64与win32版本的安装方法是一致的,同时我的电脑是win32的系统,所以我介绍下win32版本下安装的方法作为实例:1.首先从网上下载OpenNI最新版本的SDK(如下)(最近很多同学问我如何下载OpenNI的地址,因为OpenNI的官网操作真的很麻烦,所以我整理了一下,把最新版本的win32的SDK放在csdn上以供各位童鞋下载:/detail/james_kong123/4172953/detail/james_kong123/4172964由于上传有大小的限制,所以分成两部分part1和part2,要把这两个都下载放在同一个文件夹里然后一并解压,单个解压时不成功的哦)2.双击exe文件,3.一般都选择默认情况,点击Next4.选择默认的I Agree(同时套用一句笑话:据说世界上最大的骗局就是安装文件时点击‘同意’(I Agree)呵呵)5.安装完以后点击Close关闭示的所有文件图所示8.点击NiUserTracker.exe(基本上所有的exe文件都可以,但是NiUserTracker.exe 是最直观的可以判断的)若出现如下图所示,则表示安装成功以上是最简单的方法,但是我在发表上一篇博客的时候有人问到我说自己的SDK是分开的,并截图给我他的软件,于是乎我上网下载了与他相似的SDK版本,如下:在不断的反复的试验中,我搞了一个差不多有三天才最终搞定(因为OpenNI这个东西真的很怪,用户必须在控制面板里把上一次安装的程序完全卸载干净,然后再进入C盘的programfiles下,把OpenNI的文件全部删除,才不会出错)文件夹终于最后安装成功,我的安装顺序是这样的:1.先安装openni字样的安装程序2.然后再安装sensor字样的安装程序3.最后在安装nite字样的安装程序这三个顺序千万不可搞混,偶刚开始就是因为搞不定安装顺序,所以在安装完以后不能成功运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Windows 7 + QT + OpenNI + Kinect + OpenCV环境配置
一、配置Microsoft Visual Studio 2010
下载并且安装Microsoft Visual Studio 2010。
此处不累赘
二、配置QT环境:
◆下载并且安装QT :/downloads/
◆配置QT编译器:
此处为调式
器,不建议
参考
三、O penNi配置
下载OpenNi一键配置软件ZigFu:/
安装即可。
四、下载opencv2.4.5
下载后解压:
/project/opencvlibrary/opencv-unix/2.4.5/opencv-2.4.5.ta r.gz
右键开始菜单选择Microsoft Visual Studio 2010" -> "Visual Studio T ools" -> "Visual Studio 命令提示(2010)”
进入解压后的文件夹输入以下命令:
$ cd C:\opencv-2.4.5
$ mkdir build-msvc2010
$ cd build-msvc2012
$ cmake -G "NMakeMakefiles" -DBUILD_PERF_TESTS=OFF
-DBUILD_TESTS=OFF -DWITH_FFMPEG=OFF
-DCMAKE_BUILD_TYPE=Debug ..
$ nmake
$ nmake install
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ nmake
$ nmake install
$ nmake clean
build-msvc2010文件夹下install下的三个文件就是opecv库,加入系统环境变量。
五、配置QT
.pro文件夹下
INCLUDEPATH+=D:\msopencv\include \opencv\
D:\msopencv\include\opencv2\
D:/msopencv/include\
$$quote(C:/ProgramFiles(x86)/OpenNI/Include/)
LIBS+=D:\msopencv\lib\opencv_calib3d245.lib\
D:\msopencv\lib\opencv_contrib245.lib\
D:\msopencv\lib\opencv_core245.lib\
D:\msopencv\lib\opencv_features2d245.lib\
D:\msopencv\lib\opencv_flann245.lib\
D:\msopencv\lib\opencv_gpu245.lib\
D:\msopencv\lib\opencv_highgui245.lib\
D:\msopencv\lib\opencv_imgproc245.lib\
D:\msopencv\lib\opencv_legacy245.lib\
D:\msopencv\lib\opencv_ml245.lib\
D:\msopencv\lib\opencv_objdetect245.lib\
D:\msopencv\lib\opencv_video245.lib\
$$quote(C:\ProgramFiles(x86)\OpenNI\Lib\NiSampleExtensionModule.lib)\ $$quote(C:\ProgramFiles(x86)\OpenNI\Lib\NiSampleModule.lib)\ $$quote(C:\ProgramFiles(x86)\OpenNI\Lib\OpenNI.jni.lib)\ $$quote(C:\ProgramFiles(x86)\OpenNI\Lib\openNI.lib)\。