Kinect基础

Main Objects主要对象:

(1)The Context Object上下文对象

上下文对象是OpenNI中的主要对象。上下文是一个保存了应用程序使用OpenNI的完整状态的对象,它包含应用程序使用全部生产链。同一个应用程序可以创建多个上下文,但上下文之间不能够共享信息。例如,中间件节点不能从另一个上下文使用设备节点。在初次使用之前,上下文必须被初始化一次。在这一点上,所有插入的模块被加载和分析。为了释放上下文使用的内存,应用程序应该调用关闭函数。

(2)Metadata Objects元数据对象

OpenNI元数据对象封装了一系列关联到具体数据本身的属性。例如,深度图的典型属性是该图的分辨率(例如,X轴和Y轴的像素数量)。每一种生产数据的生成器有特定的元数据对象。

另外,在相关数据被生成的时候录制节点的配置,元数据对象扮演重要角色。有时候,在从一个节点读取数据的同时,应用程序改变该节点配置。这样可以导致处理不当的时候在应用程序中引起错误的矛盾。

例如:

深度生成器被配置成在QVGA分辨率(320x240像素)下产生深度图,并且应用程序连续的从其读取数据。这时候,应用程序改变了节点输出分辨率为VGA(640x480像素)。直到一个新的帧到达,应用程序会在调用xn::DepthGenerator::GetDepthMap()函数将要返回一个QVGA图的地方遭遇不一致,但调用xn::DepthGenerator::GetMapOutputMode()函数将返回当前的分辨率是VGA图。这可能导致在应用程序中,假设已接收的深度图是VGA分辨率,继而访问到不存在的像素。

解决办法如下:每一个节点都有元数据对象,它在数据被读取的时候记录数据的属性。在上面的情况中,正确的处理数据的方法是获取元数据对象,从该对象既读取实际数据(上述情况下是一个QVGA深度图)也读取相应的分辨率。

(3)Data Generators数据生成器

         Map Generator图生成器

         Depth Generator深度生成器

         Image Generator 图像生成器

        IR Generator红外生成器

         Scene Analyzer场景生成器

         Audio Generator音频生成器

        Gesture Generator姿势生成器

        Hand Point Generator手心生成器

         User Generator用户生成器

  (4)用OpenNI创建一个空工程

1.  打开一个你想使用OpenNI的新工程或已存在的空工程。
2.  在Visual Studio的菜单中,打开项目(Project)菜单并选择项目属性(Properties)。
3.  在C/C++章节中,常规(General)节点下选择附加包含目录(Additional  Include
Directories)并添加"$(OPEN_NI_INCLUDE)"。这是一个指向OpenNI的include 目录
位置的环境变量(默认位置是:“C:\Program files\OpenNI\Include”)。
4.  在连接器(Linker)章节中,常规(General)节点下选择附加库目录(Additional Library
Directories)并添加"$(OPEN_NI_LIB)"。这是一个指向OpenNI的library 目录位置的环
境变量(默认位置是:“C:\Program files\OpenNI\Lib”)。
5.  在连接器(Linker)章节中,输入(Input)节点下,选择附件依赖项(Additional
Dependencies)并添加“OpenNI.lib”。
6.  如果你希望用一个XML文件来配置OpenNI,你可以从基本的XML文件开始,该文件
在OpenNI数据文件夹(默认位置是:“C:\Program  files\OpenNI\Data”)。更多关于
OpenNI xml脚本的信息,参考“5.10 用XML文件进行配置”。
7.  确保你添加的附加包含目录和附加库目录对你的Release配置和Debug配置均有效。
8.  如果使用C接口,你的代码文件应该包含XnOpenNI.h;如果使用C++接口,则应该包
含XnCppWrapper.h。

代码:

(1)初始化,创建一个节点和读取数据

(2)枚举可能的生产链

(3)使用深度、颜色和声音图

(4)使用音频生成器

(5)录制和播放数据

(6)节点配置

“ProductionNodes”元素可以包含多个名为“Node”的元素。每个元素都会请求OpenNI
枚举和创建一个节点(就像xn::Context::CreateAnyProductionTree()函数)。“Node”元素必须
有一个名为“type”的字符串属性,该属性将指定节点被枚举时候的类型。

 

 

对于其中的例程:

Kinect Explorer:这是一WPF程序,界面分为左右两个图像区域,左边通过彩色摄像头获取图像信息,并通过骨骼追踪将骨骼叠加在图像上,右边图像是通过景深摄像头获取的景深信息,也在图上叠加了骨骼信息,在这两幅图像下面是一些列对成像参数的设置。这个例子主要是用来展示这几个传感器的应用以及如何获取传感器的信息,还包括获取骨骼数据。

Shape Game:这个一个简单的游戏,界面上的人是通过骨骼追踪绘制出来的,在Kinect前面晃动时,界面上的人也会跟着动,当碰到图形时能够得分。

Kinect Audio Demo:这个是语音识别的例子上面展示的是声音的方向,下面是语音识别的结果,有Red,Green,Blue三个单词,当站在Kinect前面说某个单词时,如果识别正确,横线会显示相应的颜色。试了一下,还是挺灵敏的。后的的例子是针对Kinect for Windows sensor设备的例子,我的Kinect for xbox Sensor不能用。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值