OpenNI depth深度数据的数据格式

图像如何打开

如何查看它的数据格式并一个个读取

试一下ENVI等

可见,灰度图的Data只有一个值[0],而彩色图的Data却有三个值[142,119,113]。

这是用ENVI的Cursor Value工具查看的

深色表示离的近,白色表示离的远。那么颜色值与深度值的换算公式为?获取每个像素点的颜色值然后换算成深度值吗?颜色是RGB,然后深度值是一个数。

链接1:网上有不少使用Qt做界面,OpenNI为库来开发kinect。或许大家的第一个问题就是询问该怎样使用Kinect来获取颜色信息图和深度信息图呢?这一节就是简单来回答这个问题的。 使用OpenNI读取颜色图和深度图的步骤如下(这个是程序的核心部分):   1. 定义一个Context对象,并 调用该对象的Init()方法来进行初始化。   2. 定义一个XnMapOutputMode格式对象,设置好分图像分辨率和帧率。   3. 定义颜色图和深度图的节点对象,并用其Create()方法来创建,参数为Context对象.   4. 设置颜色和深度图的输出模式,调用的方法是SetMapOutputMode();参数为步骤2中定义和设置好了的XnMapOutputMode对象。   6. 如果深度图和颜色图在一张图上显示,则必须对深度图像进行校正,校正的方法是调用深度图的如下方法:.GetAlternativeViewPointCap().SetViewPoint();   7. 调用context对象的StartGeneratingAll()来开启设备读取数据开关。   8. 调用context对象的更新数据方法,比如WaitAndupdateAll()方法。   9. 定义颜色图和色彩图的ImageMetaData对象,并利用对应的节点对象的方法GetMetaData(),将获取到的数据保存到对应的ImageMetaData对象中。   10. 如果需要将深度图转换成灰度图来显示,则需要自己将深度值转换成0~255的单通道或者多通道数据,然后直接用来显示。(之间的兑换比例是??)    jpg数据流   depth数据流保存为jpg数据然后转为点云    也可以减去中间jpg这一步              -->点云数据处理

 

深度图转灰度图的转换比率:无穷远∞对应白色255,越小表示跃越近,但0也有可能是代表无值。假设3米等于255,那么1等于?0.01176470..米。也就是1.17647厘米。

一张深度图总共是:640x480=307200个像素点。也就是近30万像素。

保存数据:

另外,怎么深度图上有一个黑边?那么需要跟彩色图对齐吗?怎么对齐

Kinect+OpenNI学习笔记之14(关于Kinect的深度信息):kinect的深度值精度,深度值的具体代表的距离是指哪个距离以及kinect深度和颜色扫描范围等。

首先来看下Kinect性能的基本参数,如下图所示: Kinect在使用时,微软官方推荐的距离为1220mm(4’)~3810mm(12.5’),网友heresy在他的博文Kinect + OpenNI 的深度值中 统计过,kinect在距离为1.0m时其精度大概是3mm,而当距离是3.0m时,其精度大概是3cm,因此当kinect在官方推荐的距离范围内使用 是,如果是1.2m时,其精度应该在3mm附近,如果是3.6m时其精度就大于3cm了,因此距离越远,其深度值精度越低。另外,通过OpenNI获取到的深度信息(即z坐标)的单位是mm,这一点在程序编程中要注意,且一般的深度值用12bit(其实是可以用13bit表示的)表示,即最大值为 4095,也就是代表4.095m,所以平时我们采集到的深度数据如果需要扩展到灰度图,可以乘以一个因子255/4095(为了加快该结果,一般设置为 256/4096,即转换后的灰度值每变化1,代表kinect采集到的深度值变化了16mm,如果当人的距离为1米左右时,本来精度是3mm,现在经过 归一化后精度确更加下降了,这时候拿这个距离值来做算法不懂会不会有影响,当然了,拿来做灰度图像的显示肯定是OK的),最后如果其深度值为0表示该位置 处侦测不到像素点的深度。 Kinect的侦测范围入下图所示:

可以看出,kinect的水平侦测范围为57度(即以sensor为中心,左右各28.5度)。垂直范围为43度(同理,以sensor为中心,上下各21.5度)。

http://www.cvvision.cn/author/admin/page/30/

原文地址:https://www.cnblogs.com/2008nmj/p/7375783.html