OpenNI2——初尝试之 环境搭建 与 读取VideoMode
来源:互联网 发布:python exit 1 编辑:程序博客网 时间:2024/06/06 07:00
环境配置
由于官网关闭,没有找到OpenNI2 SDK官方下载地址,下面的链接提供了各个平台下OpenNI2的下载。注意安装的版本最重要的不是要和平台对应,例如x64系统安装x64 SDK,而是要和所编写的程序对应。我刚开始安装了x64 SDK,建立工程后总是出现链接错误,检查了好久才发现工程是32位的,而添加的库文件是64位的。
OpenNI2 SDK下载链接
建立工程时的环境的配置可以参考OpenCV的配置。
读取VideoMode
OpenNI2 文档中提到,在使用setVideoMode()设置数据流格式时(如分辨率、帧率),推荐是用getSupportVidoModes()函数读取硬件所支持的格式组合:
Changes the current video mode of this stream. Recommended practice is to use Device::getSensorInfo(), and then SensorInfo::getSupportedVideoModes() to obtain a list of valid video mode settings for this stream. Then, pass a valid VideoMode to setVideoMode to ensure correct operation.
查看源码可以发现,getSupportVidoModes()返回Array<VideoMode>类型对象的引用,而Array<T>并没有实现拷贝构造函数,而且还对其进行了"隐藏":
template<class T>class Array{public: Array() : m_data(NULL), m_count(0), m_owner(false) {} Array(const T* data, int count) : m_owner(false) { _setData(data, count); } ~Array() { clear(); } int getSize() const { return m_count; } const T& operator[](int index) const {return m_data[index];} void _setData(const T* data, int count, bool isOwner = false) { clear(); m_count = count; m_owner = isOwner; if (!isOwner) { m_data = data; } else { m_data = new T[count]; memcpy((void*)m_data, data, count*sizeof(T)); } } private: Array(const Array<T>&); Array<T>& operator=(const Array<T>&); void clear() { if (m_owner && m_data != NULL) delete []m_data; m_owner = false; m_data = NULL; m_count = 0; } const T* m_data; int m_count; bool m_owner; };
可能是为了方便移植,OpenNI自己实现Array<T>而不是使用STL的容器。要接收getSupportVidoModes()返回的值,有两种方法,一是实现Array<T>的拷贝构造函数,然后重新编译OpenNI.lib;二是使用Array<T>的成员函数_setData()。使用_setData()的方法如下:
Status rc = OpenNI::initialize(); if (rc != STATUS_OK) { printf("Initialize failed\n%s\n", OpenNI::getExtendedError()); return -1; } Device device; rc = device.open(ANY_DEVICE); if (rc != STATUS_OK) { printf("Couldn't open device\n%s\n", OpenNI::getExtendedError()); return -1; } VideoStream depth; if (device.getSensorInfo(SENSOR_DEPTH) != NULL) { rc = depth.create(device, SENSOR_DEPTH); if (rc != STATUS_OK) { printf("Couldn't create depth stream\n%s\n", OpenNI::getExtendedError()); return -1; } } const SensorInfo& sensorInfo = depth.getSensorInfo(); Array<VideoMode> modes; modes._setData(&(sensorInfo.getSupportedVideoModes())[0],sensorInfo.getSupportedVideoModes().getSize(),true);连接Kinect XBOX360时,打印的结果为:
- OpenNI2——初尝试之 环境搭建 与 读取VideoMode
- mybatis学习笔记(一) --- 环境搭建与初尝试
- 【ionic3入门】ionic3初尝试之环境搭建
- Mac下OpenNI2开发环境搭建
- JRuby(学习 环境搭建 与 尝试)
- 搭建OpenCV 3.1、OpenNi2、Qt 5.5、VS2010开发环境
- OpenNI2简介、安装与VS开发环境配置
- Kinect开发:OpenNI2简介、安装与VS开发环境配置
- hadoop环境的搭建尝试
- Kinect学习一——OpenNI2的安装和配置环境
- ElasticFusion之OpenNI2编译
- Android源码学习环境搭建的尝试
- Grunt环境搭建和简单压缩尝试
- SSH与SSM学习之hibernate01——介绍与环境搭建
- SSH与SSM学习之Struts201——介绍与环境搭建和第一个例子
- SSH与SSM学习之Spring01——介绍、搭建环境与第一个例子
- Spring与DAO——环境搭建
- Maven之——环境搭建
- Servlet异常处理
- Andrew Ng 机器学习(1)-概念
- onInterceptTouchEvent和onTouchEvent调用时序
- Failed to convert property value of type [com.sun.proxy.$Proxy27 implementing com.ibeifeng.se
- HashMap排序
- OpenNI2——初尝试之 环境搭建 与 读取VideoMode
- 设计一个一元稀疏多项式简单的加减法计算器
- Oracle学习(十):视图,索引,序列号,同义词
- LeetCode——Balanced Binary Tree
- OJ2560继承(改错题)
- 跟踪oracle实例的动态注册过程
- makefile笔记
- HDU 1012 u Calculate e(水题)
- Hadoop的整文件读取