g-var.com | G-VAR's Blog

Recent Posts

Full Tag Index

Posts in “Kinect”

(转)Kinect开发学习笔记之(八)彩色、深度、骨骼和用户抠图结合 | Kinect 8

Tue, Jan 28, 2014
我的Kinect开发平台是: Win7 x86 + VS2010 + Kinect for Windows SDK v1.6 + OpenCV2.3.0 开发环境的搭建见上一文: http://blog.csdn.net/zouxy09/article/details/8146055 本学习笔记以下面的方式组织:编程前期分析、代码与注释和重要代码解析三部分。 要实现目标:整合前面所说的彩色图像、深度图像和骨骼图像,就是实现和SDK自带的那个SkeletonView例程差不多的功能。另外,再增加用户抠图功能,这个功能和SDK自带的那个Green Screen功能差不多。我们通过OpenCV来显示。 编程前期分析 这里因为是整合前面几个学习笔记提到的功能,所以要了解的东西前面都已经了解了,这里就不赘述了。这里唯一有一个新的点就是用户抠图,我们再学习学习。 那么叫抠图啊?用过Photoshop或者AE等一般的图像或者视频处理软件的人应该不会陌生。所谓抠图,就是把图片或影像的某一部分从原始图片或影像中分离出来成为单独的图层。主要功能是为了后期的合成做准备。如果还不了解的话,我们看过科幻电影或者一个特效视频吧?某个人在恐龙旁边、某个人在悬崖边打架、某个人在天上飞等等,这些场景大家有没有想过它是怎样实现的啊?难道真的是实景拍的?你都会说了“怎么可能!”。实际上很大一部分就是采用抠图这个技术的,如果搞视频特效处理的话,这个技术行业内好像叫“键控”。它在电视制作和电影制作中很常见,这种技术叫做绿屏抠像,就是演员或者播音员站在绿色底板前,然后录完节目后,绿色背景抠出,换成其他场景,在一些科幻电影中演员不可能在实景中表演时常采用的造景手法。 在Kinect中我们也可以达到类似的效果。Kinect SDK使得这个很容易实现。这实际上就是现实增强的一个基本例子,现实增强应用非常有趣而且能够获得非常好的用户体验。许多艺术家使用Kinect来进行现实增强交互展览。另外,这种技术也通常作为广告和营销的工具。 代码与注释 #include <windows.h> #include <iostream> #include <NuiApi.h> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; bool tracked[NUI_SKELETON_COUNT]={FALSE}; CvPoint skeletonPoint[NUI_SKELETON_COUNT][NUI_SKELETON_POSITION_COUNT]={cvPoint(0,0)}; CvPoint colorPoint[NUI_SKELETON_COUNT][NUI_SKELETON_POSITION_COUNT]={cvPoint(0,0)}; void getColorImage(HANDLE &colorEvent, HANDLE &colorStreamHandle, Mat &colorImage); void getDepthImage(HANDLE &depthEvent, HANDLE &depthStreamHandle, Mat &depthImage); void getSkeletonImage(HANDLE &skeletonEvent, Mat &skeletonImage, Mat &colorImage, Mat &depthImage); void drawSkeleton(Mat &image, CvPoint pointSet[], int witchone); void getTheContour(Mat &image, int whichone, Mat &mask); int main(int argc, char *argv[]) { Mat colorImage; colorImage.

(转)Kinect开发学习笔记之(七)骨骼数据的提取 | Kinect 7

Tue, Jan 28, 2014
我的Kinect开发平台是: Win7x86 + VS2010 + Kinect for Windows SDK v1.6 + OpenCV2.3.0 开发环境的搭建见上一文: http://blog.csdn.net/zouxy09/article/details/8146055 本学习笔记以下面的方式组织:编程前期分析、代码与注释和重要代码解析三部分。 要实现目标:通过微软的SDK提取骨骼数据并用OpenCV显示 编程前期分析 Kinect产生的深度数据作用有限,要利用Kinect创建真正意义上交互,还需要除了深度数据之外的其他数据。这就是骨骼追踪技术的初衷,也是Kinect最神奇,最有作为的地方。骨骼追踪技术通过处理深度数据来建立人体各个关节的坐标,骨骼追踪能够确定人体的各个部分,如那部分是手,头部,以及身体,还能确定他们所在的位置。 骨架空间 先看看啥叫骨架?应该地球人都知道吧。呵呵。在Kinect里面,是通过20个关节点来表示一个骨架的,具体由下图可以看到。当你走进Kinect的视野范围的时候,Kinect就可以把你的20个关节点的位置找到(当然你得站着),位置通过(x, y, z)坐标来表示。这样,你在Kinect前面做很多复杂的动作的时候,因为人的动作和这些关节点的位置的变化关系还是很大的,那么电脑拿到这些数据后,对于理解你做什么动作就很有帮助了。 玩家的各关节点位置用(x, y, z)坐标表示。与深度图像空间坐标不同的是,这些坐标单位是米。坐标轴x,y, z是深度感应器实体的空间x, y, z坐标轴。这个坐标系是右手螺旋的,Kinect感应器处于原点上,z坐标轴则与Kinect感应的朝向一致。y轴正半轴向上延伸,x轴正半轴(从Kinect感应器的视角来看)向左延伸,如下图所示。为了方便讨论,我们称这些坐标的表述为骨架空间(坐标)。 Kinect放置的位置会影响生成的图像。例如,Kinect可能被放置在非水平的表面上或者有可能在垂直方向上进行了旋转调整来优化视野范围。在这种情况下,y轴就往往不是相对地面垂直的,或者不与重力方向平行。最终得到的图像中,尽管人笔直地站立,在图像中也会显示出事倾斜的。 骨骼跟踪 Kinect最多可以跟踪两个骨骼,可以最多检测六个人。站立模式可以跟踪20个关节点,坐着的模式的话,可以跟踪10个关节点。 NUI骨骼跟踪分主动和被动两种模式,提供最多两副完整的骨骼跟踪数据。主动模式下需要调用相关帧读取函数获得用户骨骼数据,而被动模式下还支持额外最多四人的骨骼跟踪,但是在该模式下仅包含了用户的位置信息,不包括详细的骨骼数据。也就是说,假如Kinect面前站着六个人,Kinect能告诉你这六个人具体站在什么位置,但只能提供其中两个人的关节点的数据(这两个人属于主动模式),也就是他们的手啊,头啊等等的位置都能告诉你,而其他的人,Kinect只能提供位置信息,也就是你站在哪,Kinect告诉你,但是你的手啊,头啊等具体在什么位置,它就没法告诉你了(这四个人属于被动模式)。 对于所有获取的骨骼数据,其至少包含以下信息: 相关骨骼的跟踪状态,被动模式时仅包括位置数据(用户所在位置),主动模式包括完整的骨骼数据(用户20个关节点的空间位置信息)。 唯一的骨骼跟踪ID,用于分配给视野中的每个用户(和之前说的深度数据中的ID是一个东西,用以区分现在这个骨骼数据是哪个用户的)。 用户质心位置,该值仅在被动模式下可用(就是标示用户所在位置的)。 关于编程处理过程 在上篇文章中,我们讨论了如何获取像素点的深度值以及如何根据深度值产生影像。 彩色图像数据,深度数据分别来自ColorImageSteam和DepthImageStream,同样地,骨骼数据来自SkeletonStream。要使用骨架数据,应用程序必须在初始化NUI的时候声明,并且要启用骨架追踪。访问骨骼数据和访问彩色图像数据、深度数据一样,也有事件模式和查询模式两种方式。在本例中我们采用基于事件的方式,因为这种方式简单,代码量少,并且是一种很普通基本的方法。当SkeletonStream中有新的骨骼数据产生时就会触发该事件。 我们初始化并打开骨骼跟踪后,就可以从SkeletonStream中拿骨骼数据了。SkeletonStream产生的每一帧数据skeletonFrame都是一个骨骼对象集合。包含了一个骨架数据结构的数组,其中每一个元素代表着一个被骨架追踪系统所识别的一个骨架信息。每一个骨架信息包含有描述骨骼位置以及骨骼关节的数据。每一个关节有一个唯一标示符如头(head)、肩(shoulder)、肘(dlbow)等信息和对应的三维坐标数据。 Kinect能够追踪到的骨骼数量是一个常量。这使得我们在整个应用程序中能够一次性的为数组分配内存。循环遍历skeletonFrame,每一次处理一个骨骼。那么跟踪的骨骼也有跟得好与不好之分吧,你的姿势、是否有阻挡等等情况,都会使得跟踪不那边好。所以在处理之前需要判断一下是否是一个追踪好的骨骼,可以使用Skeleton对象的TrackingState属性来判断,只有骨骼追踪引擎追踪到的骨骼我们才进行处理,忽略哪些不是游戏者的骨骼信息即过滤掉那些TrackingState不等于SkeletonTrackingState.Tracked的骨骼数据。 Kinect能够探测到6个游戏者,但是同时只能够追踪到2个游戏者的骨骼关节位置信息。处理骨骼数据相对简单,首先,我们根据Kinect追踪到的游戏者的编号,用不同的颜色把游戏者的骨架画出来。 涉及的东西还是比较多的,但是代码思路还是比较清晰的,我们可以看代码,再看看第三部分的解析就会比较好理解了。 代码与注释 #include <windows.h> #include <iostream> #include <NuiApi.h> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; //通过传入关节点的位置,把骨骼画出来 void drawSkeleton(Mat &image, CvPoint pointSet[], int whichone); int main(int argc, char *argv[]) { Mat skeletonImage; skeletonImage.

(转)Kinect开发学习笔记之(六)带游戏者ID的深度数据的提取 | Kinect 6

Tue, Jan 28, 2014
我的Kinect开发平台是: Win7x86 + VS2010 + Kinect for Windows SDK v1.6 + OpenCV2.3.0 开发环境的搭建见上一文: http://blog.csdn.net/zouxy09/article/details/8146055 本学习笔记以下面的方式组织:编程前期分析、代码与注释和重要代码解析三部分。 要实现目标:通过微软的SDK提取带游戏者ID的深度数据并用OpenCV显示,不同用户,显示的颜色不同 编程前期分析 我们在上一文中提到的是不带游戏者ID的深度数据的提取,具体见下面: Kinect开发学习笔记之(五)不带游戏者ID的深度数据的提取 http://blog.csdn.net/zouxy09/article/details/8146719 首先,Kinect传感器核心是发射红外结构光,并探测红外光反射,从而可以计算出视场范围内每一个像素的深度值。从深度数据中最先提取出来的是物体主体和形状,以及每一个像素点的游戏者索引信息。然后用这些形状信息来匹配人体的各个部分,最后计算匹配出来的各个关节在人体中的位置。而Kinect具有一次识别多达6个游戏者的能力,并能跟踪最多两个人的骨骼(对于XBOX360来说,就是可以同时两个人玩游戏了)。 可能有点奇怪哦,这一个带游戏者ID,一个不带,还得那么严肃地给它单独开一文来学习。究竟啥来头啊。呵呵,实际上,既然微软提供了这种差别,那么它的存在肯定是有意义的,所谓存在即合理嘛。多个选择嘛。需要用到游戏者ID的时候就用,不需要的时候就不用费那么大劲。也不能说费劲,就是使用游戏者ID的时候,我们需要再做一些工作,去把不同游戏者的轮廓找出来,然后为了区别,标上不同的颜色,这就是本文想实现的。有点啰嗦了。 上一文中,我们讲到,Kinect的深度图像数据有两种格式,一种是带游戏者ID的,一种是不带的。两种格式都是用两个字节来保存一个像素的深度值,而两方式的差别在于: 唯一表示深度值:那么像素的低12位表示一个深度值,高4位未使用; 既表示深度值又含有游戏者ID:Kinect为每一个追踪到的游戏者编号作为索引。而这个方式中,像素值的高13位保存了深度值,低三位保存用户序号,7 (0000 0111)这个位掩码能够帮助我们从深度数据中获取到游戏者索引值。 要注意的是,不要对特定的游戏者索引位进行编码,因为他们是会变化的。实际的游戏者索引位并不总是和Kinect前面的游戏者编号一致。啥意思呢?例如,Kinect视野中只有一个游戏者,但是返回的游戏者索引位值可能是3或者4。也就是说有时候第一个游戏者的游戏者索引位可能不是1。还有,如果走进Kinect视野再走出去,然后再走进来,虽然你还是你,但是Kinect给你的索引ID可能就和原来的不一样了,例如之前返回的索引位是1,走出去后再次走进,可能索引位变为其他值了。所以开发Kinect应用程序的时候应该注意到这一点。 说得有点乱哦,咱们还是看代码吧。 代码与注释 #include <windows.h> #include <iostream> #include <NuiApi.h> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; //处理深度数据的每一个像素,如果属于同一个用户的ID,那么像素就标为同种颜色,不同的用户, //其ID不一样,颜色的标示也不一样,如果不属于某个用户的像素,那么就采用原来的深度值 RGBQUAD shortDepth2RGBquad( USHORT depthID ) { //每像素共16bit的信息,其中最低3位是ID(所捕捉到的人的ID),剩下的13位才是信息 USHORT realDepth = (depthID & 0xfff8) >> 3; //提取距离信息,高13位 USHORT player = depthID & 0x07 ; //提取ID信息 ,低3位 //因为提取的信息是距离信息,为了便于显示,这里归一化为0-255 BYTE depth = 255 - (BYTE)(256*realDepth/0x0fff); RGBQUAD q; q.

(转)Kinect开发学习笔记之(五)不带游戏者ID的深度数据的提取 | Kinect 5

Tue, Jan 28, 2014
我的Kinect开发平台是: Win7 x86 + VS2010 + Kinect for Windows SDK v1.6 + OpenCV2.3.0 开发环境的搭建见上一文: http://blog.csdn.net/zouxy09/article/details/8146055 本学习笔记以下面的方式组织:编程前期分析、代码与注释和重要代码解析三部分。 要实现目标:通过微软的SDK提取不带游戏者ID的深度数据并用OpenCV显示 编程前期分析 深度数据的获取和彩色图像数据的获取基本上是一样的,所以关于采集过程就不赘述了,具体见: Kinect开发学习笔记之(四)提取颜色数据并用OpenCV显示 http://blog.csdn.net/zouxy09/article/details/8146266 这里需要了解下深度数据: 深度数据流所提供的图像帧中,每一个像素点代表的是在深度感应器的视野中,该特定的(x, y)坐标处物体到离摄像头平面最近的物体到该平面的距离(以毫米为单位)。 Kinect中深度值最大为4096mm,0值通常表示深度值不能确定,一般应该将0值过滤掉。微软建议在开发中使用1220mm~3810mm范围内的值。在进行其他深度图像处理之前,应该使用阈值方法过滤深度数据至1220mm-3810mm这一范围内。 下图显示了Kinect Sensor的感知范围,其中的default range对Xbox 360和Kinect for Windows都适用,而near range仅对后者适用: 深度数据的存储: Kinect的深度图像数据含有两种格式,两种格式都是用两个字节来保存一个像素的深度值,而两方式的差别在于: 唯一表示深度值:那么像素的低12位表示一个深度值,高4位未使用; 既表示深度值又含有游戏者ID:Kinect SDK具有分析深度数据和探测人体或者游戏者轮廓的功能,它一次能够识别多达6个游戏者。SDK为每一个追踪到的游戏者编号作为索引。而这个方式中,像素值的高13位保存了深度值,低三位保存用户序号,7 (0000 0111)这个位掩码能够帮助我们从深度数据中获取到游戏者索引值(这个编程将在下一节)。 应用程序可以使用深度数据流中的深度数据来支持各种各样的用户特性,如追踪用户的运动并在程序中识别和忽略背景物体的信息等。 代码与注释 #include <windows.h> #include <iostream> #include <NuiApi.h> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main(int argc, char *argv[]) { Mat image; //这里我们用灰度图来表述深度数据,越远的数据越暗。 image.create(240, 320, CV_8UC1); //1、初始化NUI,注意:这里传入的参数就不一样了,是DEPTH HRESULT hr = NuiInitialize(NUI_INITIALIZE_FLAG_USES_DEPTH); if (FAILED(hr)) { cout<<"NuiInitialize failed"<<endl; return hr; } //2、定义事件句柄 //创建读取下一帧的信号事件句柄,控制KINECT是否可以开始读取下一帧数据 HANDLE nextColorFrameEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); HANDLE depthStreamHandle = NULL; //保存图像数据流的句柄,用以提取数据 //3、打开KINECT设备的深度图信息通道,并用depthStreamHandle保存该流的句柄,以便于以后读取 hr = NuiImageStreamOpen(NUI_IMAGE_TYPE_DEPTH, NUI_IMAGE_RESOLUTION_320x240, 0, 2, nextColorFrameEvent, &depthStreamHandle); if( FAILED( hr ) )//判断是否提取正确 { cout<<"Could not open color image stream video"<<endl; NuiShutdown(); return hr; } namedWindow("depthImage", CV_WINDOW_AUTOSIZE); //4、开始读取深度数据 while(1) { const NUI_IMAGE_FRAME * pImageFrame = NULL; //4.

(转)Kinect开发学习笔记之(四)提取颜色数据并用OpenCV显示 | Kinect 4

Tue, Jan 28, 2014
我的Kinect开发平台是: Win7 x86 + VS2010 + Kinect for Windows SDK v1.6 + OpenCV2.3.0 开发环境的搭建见上一文: http://blog.csdn.net/zouxy09/article/details/8146055 下面这几个大部分是参考“timebomb”的Kinect学习笔记系列: http://blog.csdn.net/timebomb/article/details/7169372 非常感谢“timebomb”的工作,让我能尽快的进入Kinect的开发。 本学习笔记以下面的方式组织:编程前期分析、代码与注释和重要代码解析三部分。 要实现目标:通过微软的SDK提取颜色数据(彩色图像)并用OpenCV显示 编程前期分析 我们在http://blog.csdn.net/zouxy09/article/details/8145592中提到: Kinect有三个镜头,中间的镜头是 RGB 彩色摄影机,用来采集彩色图像。左右两边镜头则分别为红外线发射器和红外线CMOS 摄影机所构成的3D结构光深度感应器,用来采集深度数据(场景中物体到摄像头的距离)。彩色摄像头最大支持1280*960分辨率成像,红外摄像头最大支持640*480成像。那下面我们就是要通过微软提供的SDK的API去读取驱动上面的彩色摄像头来读取彩色图像。 一个应用程序从Kinect传感器阵列中访问下列图像数据: 色彩数据:就是彩色摄像头采集到的数据,我们可以设置采集的分辨率; 深度数据:就是红外摄像头采集到的数据,同样可以设置采集的分辨率; 带游戏者ID的深度数据:Kinect可以检测6个人,所以深度数据中有携带标示这是哪个游戏者的深度数据的。 骨骼点数据:实际上不能算是图像数据,感觉应该是Kinect上层算法分析彩色和深度图像得到的骨骼点数据,包含了跟踪到的人的关节点的位置等信息。 而对于彩色和深度这些图像数据,SDK是以数据流的方式来组织的,也就是图像数据按顺序的一帧一帧的流过来,你需要的时候就拿。当然,如果你拿的速度比摄像头提供图像的速度要快,那么你就需要等待,等待摄像头产生新的数据给你。那么这个“等”就有了两种方式了: 查询方式:反正我也没事干,所以我不停的问摄像头拿数据,通过一个while循环不断地催它,然后一旦有新的图像数据了,我拿到就跑; 事件方式:要我不停地催你,我也烦,你没有数据给我,那我先打个瞌睡(休眠了,不用占CPU资源),然后你有新的数据来后,再叫醒我(给个有数据的信号),然后我再拿走数据。那我这个等新数据的过程就叫一个事件,系统通过一个事件的句柄来标示,这样系统才知道下面摄像头有数据来了,系统才知道唤醒谁啊,是吧。而这个事件我们待会编程就遇到了。而目前,大部分是通过这种方式来得到图像数据的。(呵呵,不知道理解得对不对) 还是通过代码来分析清晰点。 代码与注释 #include <windows.h> #include <iostream> #include <NuiApi.h> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main(int argc, char *argv[]) { Mat image; image.create(480, 640, CV_8UC3); //1、初始化NUI HRESULT hr = NuiInitialize(NUI_INITIALIZE_FLAG_USES_COLOR); if (FAILED(hr)) { cout<<"NuiInitialize failed"<<endl; return hr; } //2、定义事件句柄 //创建读取下一帧的信号事件句柄,控制KINECT是否可以开始读取下一帧数据 HANDLE nextColorFrameEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); HANDLE colorStreamHandle = NULL; //保存图像数据流的句柄,用以提取数据 //3、打开KINECT设备的彩色图信息通道,并用colorStreamHandle保存该流的句柄,以便于以后读取 hr = NuiImageStreamOpen(NUI_IMAGE_TYPE_COLOR, NUI_IMAGE_RESOLUTION_640x480, 0, 2, nextColorFrameEvent, &colorStreamHandle); if( FAILED( hr ) )//判断是否提取正确 { cout<<"Could not open color image stream video"<<endl; NuiShutdown(); return hr; } namedWindow("colorImage", CV_WINDOW_AUTOSIZE); //4、开始读取彩色图数据 while(1) { const NUI_IMAGE_FRAME * pImageFrame = NULL; //4.

(转)Kinect开发学习笔记之(三)Kinect开发环境配置 | Kinect 3

Tue, Jan 28, 2014
我的Kinect开发平台是: Win7 x86 + VS2010 + Kinect for Windows SDK v1.6 + OpenCV2.3.0 基本要求 Microsoft Visual Studio® 2010 预览版或者其他VisualStudio 2010发行版 Microsoft.NET Framework 4.0 (安装在Visual Studio 2010) 对于C++开发者要浏览骨骼样例需要: DirectXSoftware Development Kit,June 2010或最新版 DirectXEnd-User Runtime Web Installer 对于语音识别样例 (x86only): MicrosoftSpeech Platform - Server Runtime, version 10.2 (x86 edition) MicrosoftSpeech Platform - Software Development Kit, version 10.2 (x86 edition) Kinect for Windows RuntimeLanguage Pack, version 0.9 (微软语音平台为Kinect Windows SDK Beta提供的声学模型) 安装和配置Kinect for Windows SDK v1.

(转)Kinect开发学习笔记之(二)Kinect开发学习资源整理 | Kinect 2

Tue, Jan 28, 2014
刚刚接触Kinect,在网上狂搜资料,获得了很多有利于学习Kinect开发的资源,现整理如下: 首先当然是官方的API介绍了,编程少不了的。Kinect for Windows Programming Guide: http://msdn.microsoft.com/en-us/library/hh855348.aspx KinectSDK的视频开发教程: http://channel9.msdn.com/Series/KinectSDKQuickstarts?sort=recent#tab_sortBy_recent KinectSDK的开发指南: http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/guides.aspx KinectSDK的官方论坛: http://social.msdn.microsoft.com/Forums/en-US/kinectsdk/threads “无花无酒锄作田”的博客,对《Apress Beginning Kinect Programming with the Microsoft Kinect SDK》这本书的连载翻译(目前到十五节了,好像完了),这本书的的英文pdf版可以网上下载。书的内容不仅介绍了如何通过Kinect SDK编程,还介绍了关于人机交互软件设计的很多内容,虽然书所采用的编程语言可能与你的不同,但很多设计思想很有参考价值。 http://www.cnblogs.com/yangecnu/archive/2012/03/30/KinectSDK_Geting_Started.html 马宁的Kinect for Windows SDK开发初体验系列 http://www.cnblogs.com/aawolf/archive/2011/06/17/2083249.html Kinect+OpenNI学习笔记 系列 http://www.cnblogs.com/tornadomeet/archive/2012/09/26/2704046.html timebomb的Kinect学习笔记系列(终于找到一个基于Opencv和C++的了) http://blog.csdn.net/timebomb/article/details/7169372 如何使用Kinect for windows SDK中的NUI(彩色图像获取) http://blog.csdn.net/leowangzi/article/details/6604513 OpenCV的新版支持与OpenNI的结合,故可直接对其彩色或者深度图像等获取: UsingKinect and other OpenNI compatible depth sensors http://docs.opencv.org/doc/user_guide/ug_highgui.html Kinect相关最新资讯: ENGADGET中国版 http://cn.engadget.com/tag/kinect 体感之家 http://www.kinecthome.com/portal.php 商业不靠谱Kinect http://www.bukop.com/?s=Kinect 雷锋网 Kinect http://www.leiphone.com/tag/kinect 然后,下面的内容来自:http://blog.csdn.net/chenli2010/article/details/6887646 首先是csdn上小斤童鞋的系列文章: Kinect开发教程一:OpenNI的安装与开发环境配置 Kinect开发教程二:OpenNI读取深度图像与彩色图像并显示 Kinect开发教程三:利用OpenNI进行手势识别 Kinect开发教程四:用Kinect控制鼠标玩水果忍者PC版 Kinect开发教程五:OpenNI获取人体骨架 其次是mp77技术交流频道上的系列文章,基于openNI的《user guide》来写的,简明易懂(作者自称西大学生,俺不知是哪个西大): Kinect内幕——解析SDK(OpenNIFramework 1):PrimeSense OpenNI Framework的基本架构和设计思路

(转)Kinect开发学习笔记之(一)Kinect介绍和应用 | Kinect 1

Tue, Jan 28, 2014
Kinect简介 Kinectfor Xbox 360,简称 Kinect,是由微软开发,应用于Xbox 360 主机的周边设备。它让玩家不需要手持或踩踏控制器,而是使用语音指令或手势来操作 Xbox360 的系统界面。它也能捕捉玩家全身上下的动作,用身体来进行游戏,带给玩家“免控制器的游戏与娱乐体验”。其在2010年11月4日于美国上市,建议售价149美金。Kinect在销售前60天内,卖出八百万部,目前已经申请金氏世界记录,成为全世界销售最快的消费性电子产品。 2012年2月1日,微软正式发布面向Windows系统的Kinect版本“Kinect for Windows”,建议售价249美金。而在2012年晚些时候,微软还将发布面向“教育用户”的特别版Kinect。(以上来自wiki百科) 硬件 Kinect有三个镜头,中间的镜头是 RGB 彩色摄影机,用来采集彩色图像。左右两边镜头则分别为红外线发射器和红外线CMOS 摄影机所构成的3D结构光深度感应器,用来采集深度数据(场景中物体到摄像头的距离)。彩色摄像头最大支持1280*960分辨率成像,红外摄像头最大支持640*480成像。Kinect还搭配了追焦技术,底座马达会随着对焦物体移动跟着转动。Kinect也内建阵列式麦克风,由四个麦克风同时收音,比对后消除杂音,并通过其采集声音进行语音识别和声源定位。 软件开发环境 非官方组合 一开始微软对Xbox 360推出Kinect的时候,并没有在windows的开发包。而由于Kinect强大的功能和相对低廉的价格,geeks们纷纷表示希望能在电脑上用它。于是就有多位大牛开发了驱动,目前我了解到的有三个: CL NUI Platform 由NUI的大牛AlexP开发(他开发的其他著名产品包括PS3的windows驱动),可以到这里下载,目标平台是windows7,能够获取彩色摄像头,深度传感器以及加速度传感器数据,使用简单方便。 OpenKinect/libfreenect 由号称第一个破解Kinect的Hector Martin发起,可以到这里下载,目标平台是Linux and Mac,据说有人成功移植到了windows上。因为很多geek都是Mac的拥趸,所以开发参与者众多,不仅仅是个可以获得数据的driver,geek们还写了其他高级的东西,比如我前面提到的骨骼化,将彩色摄像头作为纹理贴在深度数据上等等,很吸引人啊。 OpenNI OpenNI(opennatural interface开放自然交互)是一个多语言,跨平台的框架,它定义了编写应用程序,并利用其自然交互的API。可以到这里下载。从名字判断其终极目标大约是实现少数派报告的效果,从目前放出来的一些demo,恐怕已经超越了这个终极目标。它不是专为Kinect开发,但有Kinect的生产商PrimeSense的支持。这个感觉也是目前相对来说用的比较多的非官方组合:SensorKinect + NITE + OpenNI;其中SensorKinect是Kinect的驱动。NITE是PrimeSense提供的中间件,可以分析Kinect读取的资料,输出人体动作等等。 微软官方SDK Kinect体感游戏在Xbox 360 上获得很好的评价,但是对于 Windows 平台上的开发却一直只能使用非官方的解决方案(上面所说),例如NKinect 配合CL NUI SDK;但是微软终于在2011 年 6 月推出了 Kinect forWindows SDK Beta,特别是可以使用 C# 与.NETFramework 4.0 来进行开发。Kinect for Windows SDK主要是针对Windows7设计,内含驱动程序、丰富的原始感测数据流程式开发接口、自然用户接口、安装文件以及参考例程。Kinect for Windows SDK可让使用C++、C#或VisualBasic语言搭配MicrosoftVisualStudio2010工具的程序设计师轻易开发使用。目前最新是V1.6 。 Kinectfor Windows SDK的下载地址: http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx Kinect SDK目前只支持Windows 7,分为x86和x64两个版本。开发工具方面还需要.