OpenNI使用介绍

OpenNI简介

OpenNI是PrimeSense公司联合其他公司制定的一个多语言、跨平台的规范,以此规范为基础为上层应用提供一个与视觉和音频传感器通信的统一的接口。目前主要应用在各种深度传感器中。

四大主要的接口类的简单介绍

  1. openni::OpenNI

    OpenNI类是应用使用OpenNI API的唯一入口,除此以外它还提供了访问设备、设备相关事件、版本以及出错信息的方法

  2. openni::Device

    对于一个sensor设备OpenNI会提供一个Device类,在生Device对象create前需要先对OpenNI进行initializ

  3. openni::VideoStream

    VideoStream类提供是设备中的一个视屏流封操作接口,需要依赖Device对象,而被VideoFrameRef对象所依赖。

  4. openni::VideoFrameRef

    VideoFrameRef是视频流属性和元数据的接口类

另外其他重要的类有:

  • Recorder类:提供将视屏流存储到文件中的接口
  • Listener类:检测OpneNI和视频流的个各种事件
  • DeviceInfo类:提供设备和设备事件的信息接口

OpenNI类

  1. 基本设备操作函数

    • OpenNI::initialize(), OpenNI环境的初始化,初始化成功后才能使用其他函数
    • OpenNI::enumerateDevices(), 系统中所有可用设备的枚举
    • OpenNI::shutdown(), OpenNI关闭
    • OpenNI::waitForAnyStream(), 等待指定视频流的数据更新,用于阻塞轮询
    • OpenNI::getExtendedError(), 获取错误信息
    • OpenNI::getVerion(), 获取版本信息
  2. 注册事件监听函数

    • OpenNI::addDeviceConnectedListener(), 注册监听设备连接事件
    • OpenNI::addDeviceDisconnectedListener(), 注册监听设备移除事件
    • OpenNI::addDeviceStateChangedListener(), 注册监听设备状态改变事件

    这些函数都另外有对应的remove函数,这些事件都指向一个OpenNI::DeviceInfo类。

Devices类

既可以连接的物理设备,也可以连接到ONI文件。

  1. 基本操作函数

    • Devices::open(), 打开设备
    • Devices::close(), 关闭设备
    • Devices::isValid(), 判读是否是实际的设备
    • Devices::getDeviceInfo(), 获取设备信息类
    • Devices::hasSensor(), 是否有指定的传感器
  2. 参数配置函数

    • 设置Registration标定配置: setImageRegistrationMode()
    • 设置同步FrameSync配置: setDepthColorSyncEnabled()
    • 其他配置设置: setProperty()

VideoStream类

  1. 基本操作函数

    • VideoStream::create(), 创建流,需要一个已经初始化的Devices对象
    • VideoStream::start(), 数据流传输开始
    • VideoStream::stop(), 数据流停止
    • VideoStream::readFrame(), 读取一帧数据,用于轮询阻塞读取
    • VideoStream::onNewFrame(), 新的一帧数据事件函数,需要其他设置

VideoStreamRef类

最常见的作用是作为readFrame()函数的操作,接收数据。

  1. 基本操作

    • VideoStreamRef::getData(), 获取原始数据指针
    • VideoStreamRef::getVideoMode(), 获取视屏模式
    • VideoStreamRef::getVideoMode().getResolutionX()、VideoStreamRef::getVideoMode().getResolutionY(), 获取视屏分辨率
    • VideoStreamRef::getSensorType(), 获取sensor类型

DeviceInfo类

  • DeviceInfo::getUri(), 获取设备Uri

参考

  1. 《OPENNI PROGRAMMER’S GUIDE》
Compartir