微软Kinect for windows SDK 使用教程一 (NUI部分)
如何使用Kinect for windows SDK中的NUI(彩色图像获取) 前言 微软于2011年6月16日推出的windows平台体感设备kinect的开发包beta版。尽管还有很多不足,许多功能都不完整,但是已经让我们这些期盼了半年多的程序员们兴奋不已了。 我也是初次接触这个SDK,以前一直使用OpenNI。在使用过程中发现一些问题,整体构架什么的,SDK远不如OpenNI完善,甚至于SDK中的例子,也像是匆忙赶制出来的 -_-# 好吧,我承认,即使这样,我也依然要使用这个SDK…… 为了让大家的NI没白学,也让新人能快速入门,特意写下一些心得,算是入门级的教程了。 何人适合阅读此教程 只要你C/C++语法没问题,WINDOWS平台下的编程能通过阅读代码理解,就可以了。 但是为了便于提高输出的FPS,我使用了OpenGL而不是例子中自带的D3D,所以你最好有点OpenGL基础(认真研究过NI的童鞋们笑而不语)。不过不会也没关系,我尽量把它们分开讲解。 此教程包含什么 kinect设备包括一个彩色摄像头,一个红外发射摄像头及一个红外接收摄像头,另外,还包括一组由4个高性能的降噪麦克阵列组成的语音设备(可是TYYD为什么不提供降噪API)。 SDK中包含了以上所有设备的访问功能,尤其是降噪麦克的读入加上speech库积累多年的识别训练,它终于不再是摆设了(恐怕所有从其他第三方驱动转型到SDK中的童鞋们,都是冲着这个来的 ^_^)。 此教程不会完整到包含全部使用的程度,看标题就知道了,目的仅仅是让大家能通过此教程,快速学会如何使用SDK获取/使用Kinect设备中的彩色图像数据、深度图像数据、用户数据、骨骼数据。这部分都是用来实现自然用户界面(NUI)的功能的,也就是我们常说的“体感”。因此这些内容统称为NUI。 至于其他诸如audio及语音识别等部分,考虑以后再说吧(如果2012过完我还活着的话 -_-#) 好了,废话讲完,让我们开始吧,首先从读取/显示彩色图像开始 ^_^ 一.一些基本设置 1.1 在vs2010项目中,需要设置C++目录 包含目录中加入 $(MSRKINECTSDK)\inc 库目录中加入 $(MSRKINECTSDK)\lib MSRKINECTSDK是环境变量,正确安装MS KINECT FRO WINDOWS SDK 后,会在计算机中的环境变量中看到。 1.2 添加特定库 除了指定目录外,你还需要在链接器中设置附加依赖项,填入MSRKinectNUI.lib 1.3 头文件 为了使用NUI中的API,首先我们要包含 MSR_NuiApi.h #include "MSR_NuiApi.h" 切记,在这之前,要保证你已经包含了windows.h #include <Windows.h> #include "MSR_NuiApi.h" 否则 msr_nuiapi中很多根据windos平台定义的数据类型及宏都不生效。 二.初始化NUI 接下来,任何想使用微软提供的API来操作KINECT,都必须在所有操作之前,调用NUI的初始化函数 HRESULT NuiInitialize(DWORD dwFlags); dwFlags参数是以标志位的含义存在的。你可以使用下面几个值来指定你打算使用NUI中的哪些内容。 NUI_INITIALIZE_FLAG_USES_DEPTH_AND_PLAYER_INDEX 使用NUI中的带用户信息的深度图数据 NUI_INITIALIZE_FLAG_USES_COLOR 使用NUI中的彩色图数据 NUI_INITIALIZE_FLAG_USES_SKELETON 使用NUI中的骨骼追踪数据 NUI_INITIALIZE_FLAG_USES_DEPTH 仅仅使用深度图数据(如果你自己有良好的场景分析或物体识别算法,那么你应该用这个) 以上4个标志位,你可以使用一个,也可以用 | 操作符将它们组合在一起。例如: //只使用彩色图 HRESULT hr = NuiInitialize(NUI_INITIALIZE_FLAG_USES_COLOR); //使用带用户信息的深度图/使用用户骨骼框架/使用彩色图 HRESULT hr = NuiInitialize(NUI_INITIALIZE_FLAG_USES_DEPTH_AND_PLAYER_INDEX | NUI_INITIALIZE_FLAG_USES_SKELETON | NUI_INITIALIZE_FLAG_USES_COLOR); 一个应用程序对一个KINECT设备,必须要调用此函数一次,并且也只能调用一次。如果在这之后又调用一次初始化,势必会引起逻辑错误(即使是2个不同程序)。 比如你运行一个SDK的例子,在没关闭它的前提下,再运行一个,那么后运行的就无法初始化成功,但不会影响之前的程序继续运行。 如果你的程序想使用多台KINECT,那么请使用INuiInstance接口来初始化你的设备。(至今为止我还没有测试过多台,留到以后再说吧 -_-#) 另外,作为一名KINECT程序员,你需要记得的是,微软SDK中提供的运行环境在处理KINECT传输数据时,是遵循一条3步骤的运行管线的。 第一阶段只处理彩色和深度数据 第二阶段处理用户索引并根据用户索引将颜色信息追加到深度图中。(这回你明白为什么NUI_INITIALIZE_FLAG_USES_DEPTH_AND_PLAYER_INDEX这个标志位起这么长的名字了吧 -_-#) 第三阶段处理骨骼追踪数据 NuiInitialize就是应用程序用通过传递给dwFlags参数具体值,来初始化这个管线中必须的阶段。因此,我们总是先在标志位中指定图像类型,才可以在接下来的环节中去调用NuiImageStreamOpen之类的函数。如果你初始化的时候没指定NUI_INITIALIZE_FLAG_USES_COLOR,那你以后就别指望NuiImageStreamOpen能打开彩色数据了,它肯定会调用失败,因为没初始化嘛。(我自己都觉得这些东西说的太罗嗦了,不知道看的人懂没懂 -_-#) 好了,现在我们初始化一下NUI,本程序只读取彩色图,那么标志位如何设置?你懂的…… 友情提示使用OpenGL的程序员们,如果你们是在使用glut库,那么不要在glMainLoop()后面调用NuiShutdown(),因为它不会执行,你应该在窗口关闭以及任意你执行了退出代码的时刻调用它。 四.打开对NUI设备的访问通道 我们使用这个函数来打开kinect彩色或者深度图的访问通道,当然,其内部原理是通过"流"来实现的,因此,你也可以把这个函数理解为,创建一个访问彩色或者深度图的数据流. 参数: eResolution dwImageFrameFlags_NotUsed dwFrameLimit hNextFrameEvent phStreamHandle 返回值 好了,让我们实战一小下吧~ 五.读取彩色图数据 dwMillisecondsToWait ppcImageFrame 返回值 好了,让我们读取一帧吧 应用程序必须调用NuiImageBuffer:ockRect方法,来获取当前帧中,跟图形有关的缓冲(还记得前面说过,你可以指定1-4个缓冲区么),继续我们的代码 当然,这没什么实际意义,还是抓紧读取我们的彩色图像素信息吧。 BYTE * pBuffer = (BYTE*) LockedRect.pBits; 聪明的童鞋们,200+399*640代表什么含义,你懂的,乘以4又代表什么含义,你也懂的…… 终于讲完了,单个点都会读取了,那么从头遍历到结尾,只需要一个嵌套循环而已 Read more http://codevisualization.com/ |
微软Kinect for windows SDK 使用教程一 (NUI部分)相关推荐
- [译]Kinect for Windows SDK开发入门(八):骨骼追踪进阶 上
前7篇文件我们介绍了Kinect SDK中各种传感器的各种基本知识,我们用实验的方式演示了这些基本对象和方法的如何使用,这些都是Kinect开发最基本的知识.了解了这些基本知识后,就可以开发出一个基于 ...
- 深度相机(八)--OpenNI及与Kinect for windows SDK的比较
OpenNI(开放自然交互)是一个多语言,跨平台的框架,它定义了编写应用程序,并利用其自然交互的API.OpenNI API由一组可用来编写通用自然交互应用的接口组成.OpenNI的主要目的是要 ...
- 【计算机视觉】深度相机(八)--OpenNI及与Kinect for windows SDK的比较
OpenNI(开放自然交互)是一个多语言,跨平台的框架,它定义了编写应用程序,并利用其自然交互的API.OpenNI API由一组可用来编写通用自然交互应用的接口组成.OpenNI的主要目的是要形成一 ...
- Kinect for Windows SDK v2.0 开发笔记 (十三) 高清面部帧(4) 面部模型构建器
(转载请注明出处) 使用SDK: Kinect for Windows SDK v2.0 public preview1409 同前面,因为SDK未完成,不附上函数/方法/接口的超链接. 这次让 ...
- Kinect for Windows SDK v2.0 开发笔记 (十二) 高清面部帧(3) 面部模型(2D)
(转载请注明出处) 使用SDK: Kinect for Windows SDK v2.0 public preview1409 同前面,因为SDK未完成,不附上函数/方法/接口的超链接. 是的, ...
- Kinect for Windows SDK 1.6的改进及新特性
转自http://www.cnblogs.com/yangecnu/archive/2012/10/09/New-features-in-Kinect-for-Windows-SDK1_6.html ...
- Kinect for Windows SDK开发入门
Kinect for Windows SDK开发入门(一):开发环境配置 首先来看一下Kinect设备: 1. Kinect设备 黑色的Kinect设备如下图:基座和感应器之间有一个电动的马达,通过程 ...
- Kinect for Windows SDK v2.0 开发笔记 (五)骨骼帧与笑面男
(转载请注明出处) 使用SDK: Kinect for Windows SDK v2.0 public preview 这次说说这骨骼帧的获取.嗯,Kinect买来就为这个啊.不然其他数据,买其他产品 ...
- Kinect for Windows SDK发布
转载请注明出处为KlayGE游戏引擎,本文地址为http://www.klayge.org/2011/06/17/kinect-for-windows-sdk%e5%8f%91%e5%b8%83/ 前 ...
- [译]Kinect for Windows SDK开发入门(二):基础知识 上
上篇文章介绍了Kinect开发的环境配置,这篇文章和下一篇文章将介绍Kinect开发的基本知识,为深入研究Kinect for Windows SDK做好基础. 每一个Kinect应用都有一些基本元素 ...
最新文章
- MySQL 5.7 SYS SCHEMA
- python3环境下“No module named nrrd”的解决办法
- 浅谈CPU、内存、虚拟内存、硬盘之间的关系
- Idea新建项目默认是JDK1.5解决办法
- java反射机制详解_Java反射机制详解
- GIT常用命令--拉取提交
- python Requests登录GitHub
- python datatime 平均值_python求数据的时间平均
- Open3d之文件IO
- 直播流播放器 html,rtmp直播视频流播放器(ckplayer)使用方法
- html中class类怎么写,HTML class 属性 | 菜鸟教程
- 国家法定节假日调整已形成方案
- macbookpro2011安装单系统win10
- 【Python计量】异方差性的检验
- Chapter3-线性模型线性模型
- 进程与程序的联系与区别
- [源码解析] 深度学习流水线并行 PipeDream(3)--- 转换模型
- 计算机默认网关不可用如何解决问题,Win10网络诊断后提示“默认网关不可用”的问题怎么解决?...
- 困难是不能躲避的,不能让别人替你去抗的。任何困难都必须你自己去面对。创业就是面对困难...
- nuiapp请求网络_App Store 上的“LEG-NUI”
热门文章
- 多功能科学计算机在线使用,多功能科学计算器
- 面试乐融集团Python开发工程师助理有感
- 面试题——红黑树,B树、B+树
- AWS实战:AWS Kinesis Data Firehose
- Vray材质学习笔记04——磨砂金属材质
- 半圆形进度条(小程序)
- 软件工程阶段性总结(一)——概述
- R语言使用timeROC包计算无竞争情况下的生存资料多时间AUC值、使用cox模型、并添加协变量、可视化无竞争情况下的生存资料多时间ROC曲线
- r语言 svycoxph_基于R语言实现COX模型诊断
- 服务器手机远程控制,向日葵远程控制让手机也能远程管理