OpenNI2 开发者指南

本文由官方文档翻译而来

 

总览

目的

OpenNI 2.0 API(应用程序编程接口)提供了访问PrimerSense的兼容深度传感器。这就使得一个应用程序能够初始化传感器和从设备接收深度(depth),彩图(RGB)和红外(IR)视频流,还提供了一个统一的接口给传感器和通过深度传感器创建.oni记录文件。

OpenNI也提供了第三方中间件开发者可以相互使用深度传感器的统一接口。应用程序还能用第三方中间件(如NITE2),也可以使用直接由OpenNI提供的基础的深度和视频数据。

高级API一览

获取深度视频流需要使用4个主要的类(class)。

1.     openni::OpenNI提供了一个静态的API进入点。它提供访问设备,设备相关事件,版本和错误信息。当然,首先得确保你连接了设备。

2.     openni::Device提供了一个传感器设备连接系统的接口(个人理解就是通过Device类来访问控制传感器)。在它创建之前需要对OpenNI类进行初始化。Device可以访问流(Streams)。

3.     openni::VideoStream从一个设备(Device)里提取一个视频流,需要获取视频帧引用(VideoFrameRefs)。

4.     openni::VideoFramRef从相关的源数据里提取一个视频帧。这是从一个特定的流里面获取的。

 

除了这些主要的类以外,还有许多类和结构体用来保持一些特殊类型的数据。Rocorder类就是用来存储OpenNI视频流到文件的。还有Listener类用来监听OpenNI和Stream类产生的事件。

视频流可以通过两种方式来获取数据:轮询和事件。下面会有具体介绍。

OpenNI 类

简介

首先是最主要组成OpenNI2的是openni::OpenNI,这个类提供了一个API的静态入口。可用来访问系统中所有的设备(传感器设备)。也可以生成许多设备连接和断开事件,和提供以轮询方式访问数据流的功能一样。

 

设备的基础访问

OpenNI类提供了API的静态入口,是在OpenNI::initialize()方法。这个方法初始化所有的传感器驱动并且扫描系统中所有可用的传感器设备。所有使用OpenNI的应用程序在使用其他API之前都应该调用此方法。

一旦初始化方法完成,将可能会设备(Device)对象,并使用这些对象来和真实的传感器硬件进行交互。OpenNI::enumerateDevices()方法会返回一个已经连接上系统的可用的传感器设备列表。

当应用程序准备退出时,必须调用OpenNI::shutdown()方法来关闭所有驱动并且正确地清除所有。

 

视频流(Video Streams)的基础访问

流的轮询访问系统是OpenNI::waitForStream()方法实现的。此方法的参数之一就是流的列表。当方法调用时,就会锁定直到列表中的流有新的可用数据。然后返回一个状态码(status code)并指向是哪个流有可用数据了。

 

设备的事件驱动访问

OpenNI类提供了一个在事件驱动方式(event driven manner)中访问设备的框架。OpenNI定义了3个事件:设备连接事件(onDeviceConnected),设备断开事件(onDeviceDisconnected),设备状态改变事件(onDeviceStateChanged)。设备连接事件是在一个新的设备连接并通过OpenNI可用时产生的,设备断开事件是在一个设备从系统中移除时产生的。设备状态改变事件是在设备的设置被改变时产生的。

 

可以用下列方法从事件处理列表中增添或者移除监听器类(Listener classes):

OpenNI::addDeviceConnectedListener()//添加设备连接事件监听器

OpenNI::addDeviceDisconnectedListener()//添加设备断开事件监听器

OpenNI::addDeviceStateChangedListener()//添加设备状态改变事件监听器

OpenNI::removeDeviceConnectedListener()//移除设备连接事件监听器

OpenNI::removeDeviceDisconnectedListener()//移除设备断开事件监听器

OpenNI::removeDeviceStateChangedListener()//移除设备状态改变事件监听器

 

3个事件都提供了一个指针指向OpenNI::DeviceInfo对象。这个对象用来获取被事件提交的设备的细节和标识。此外,设备状态改变事件还提供了一个指针指向DeviceState对象,这个对象被用来查看设备新的状态信息。

 

事件驱动通过视频流类(VideoStream class)来访问真实的视频流

 

错误信息

在SDK中有许多方法都会返回一个类型为“Status”的值。当错误发生,Status就会包含有一个记录或者显示给用户的代码。OpenNI::getExtendedError()方法会返回更多的关于错误的可读信息。

 

版本信息

API的版本信息由OpenNI::getVersion()方法来获取。这个方法返回应用程序目前使用的API的版本信息。

 

 

 

设备类(Device Class)

简介

openni::Device类提供了一个物理硬件设备的接口(通过驱动)。也通过一个从物理设备得来的ONI记录文件提供了一个模拟硬件设备

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值