openni 保存oni 文件
时间: 2023-12-20 08:04:14 浏览: 135
要保存 OpenNI 捕捉到的数据为 ONI 文件,你可以按照以下步骤进行操作:
1. 初始化 OpenNI 环境并打开设备:
```python
from openni import openni2
# 初始化 OpenNI 环境
openni2.initialize()
# 打开设备
dev = openni2.Device.open_any()
```
2. 创建录制器并设置保存路径:
```python
recorder = openni2.Recorder.create("your_file.oni")
# 设置录制器的输出
recorder.attach(dev)
```
3. 开始录制数据:
```python
recorder.start()
```
4. 停止录制并释放资源:
```python
recorder.stop()
recorder.release()
# 关闭设备和 OpenNI 环境
dev.close()
openni2.unload()
```
这样,OpenNI 捕捉到的数据就会被保存为指定的 ONI 文件。请确保在运行代码之前已经安装了适当的 OpenNI 库和驱动程序。
相关问题
openni和openni2
OpenNI是一个开放式的自然用户界面(NUI)框架,用于开发基于运动感知的应用程序。它提供了一组API和工具,用于访问和处理传感器设备(如深度相机、红外摄像头和骨骼跟踪器)的数据流。OpenNI2是OpenNI的第二个版本,它对API进行了更新和改进,并提供了更好的性能和功能。
OpenNI2的主要组成部分是openni::OpenNI类,它提供了一个API的静态入口,用于访问系统中所有的设备(传感器设备)。它还可以生成设备连接和断开事件,并提供以轮询方式访问数据流的功能。
另一个重要的类是openni::Device,它提供了一个接口来连接传感器设备。在创建Device之前,需要对OpenNI类进行初始化。Device可以用来访问和控制传感器的流(Streams)。
openni用法
OpenNI是一个开源的跨平台的自然用户界面(NUI)库,可以用于开发各种基于动作识别的应用程序,例如手势识别、姿态检测、面部识别等。下面是OpenNI的用法:
1. 下载OpenNI SDK:可以从OpenNI官方网站下载SDK,根据自己的操作系统选择相应的版本。
2. 安装OpenNI SDK:将下载好的SDK进行解压,然后运行install.sh(Linux/Mac)或install.bat(Windows)进行安装。
3. 连接深度相机:将深度相机连接到计算机上,例如Kinect或者Xtion Pro等。
4. 使用OpenNI API:使用C++或其他支持OpenNI的语言进行编程,可以使用OpenNI API读取深度图像、彩色图像和骨骼信息等,并进行相应的处理。
以下是一个简单的OpenNI程序示例,可以读取Kinect深度图像并显示出来:
```c++
#include <iostream>
#include <OpenNI.h>
using namespace openni;
using namespace std;
int main()
{
// 初始化OpenNI
if (OpenNI::initialize() != STATUS_OK)
{
cerr << "OpenNI初始化失败" << endl;
return 1;
}
// 打开Kinect设备
Device device;
if (device.open(ANY_DEVICE) != STATUS_OK)
{
cerr << "无法打开Kinect设备" << endl;
return 1;
}
// 创建深度流
VideoStream depthStream;
if (device.hasSensor(SENSOR_DEPTH))
{
if (depthStream.create(device, SENSOR_DEPTH) == STATUS_OK)
{
// 设置深度模式
VideoMode mode;
mode.setResolution(640, 480);
mode.setFps(30);
mode.setPixelFormat(PIXEL_FORMAT_DEPTH_100_UM);
depthStream.setVideoMode(mode);
// 启动深度流
if (depthStream.start() != STATUS_OK)
{
cerr << "无法启动深度流" << endl;
return 1;
}
}
else
{
cerr << "无法创建深度流" << endl;
return 1;
}
}
// 循环读取深度图像
while (true)
{
// 读取深度帧
VideoFrameRef depthFrame;
if (depthStream.readFrame(&depthFrame) == STATUS_OK)
{
// 转换深度数据
const DepthPixel* depthData = (const DepthPixel*)depthFrame.getData();
int width = depthFrame.getWidth();
int height = depthFrame.getHeight();
// 显示深度图像
for (int y = 0; y < height; ++y)
{
for (int x = 0; x < width; ++x)
{
int i = y * width + x;
cout << depthData[i] << " ";
}
cout << endl;
}
}
}
// 关闭深度流和设备
depthStream.stop();
depthStream.destroy();
device.close();
// 关闭OpenNI
OpenNI::shutdown();
return 0;
}
```
当然,这只是一个简单的示例,OpenNI还有很多其他的功能和用法,可以参考官方文档进行学习和使用。
阅读全文