c++ - 从 Kinect SDK 获取以毫米为单位的录制视频的深度

标签 c++ kinect

我正在为我的项目使用使用 C++ 语言从 Kinect 录制的视频。我正在尝试获取一个点的真实世界坐标(真实深度)。但我不知道 Kinect SDK 中是否有用于该目的的函数。所以我颠倒了这个公式:

BYTE b = 255 - static_cast (256  realDepth / 0x0FFF)

得到这个:

realDepth = (255-b) * 0x0FFF / 256

我不知道我做的对不对。你有什么建议?

最佳答案

看过之后this video ,我认为你应该按如下方式进行:

  • 白色像素是最远的距离,(对于不在近距离模式下的 Kinect SDK 1.x,即默认模式)等于 4 米;
  • 黑色像素可以是未知值,也可以是最接近的可能值,(对于默认模式下的 Kinect SDK 1.x)等于 0.8 米。

所以这意味着,如果我猜对了那些视频是在默认模式下录制的,并且假设你转换灰度图像中的每一帧(每个像素值的范围从 0 到 255),你应该使用以下公式:

realDepth (in meters) = ( 3.2 * grayValue / 255 ) + 0.8

这样,如果 grayValue 等于 0(黑色),则 realDepth 为 0.8 米。如果 grayValue 等于 255(白色),则 realDepth 为 4 米。

如果您想要以毫米为单位的 realDepth,只需将其除以 1000。

另请注意,一些黑色像素也可以表示未知值。因此,如果 realDepth 等于 0.8,您无法确定这是正确的值,或者它实际上是否是一个未知值。

关于c++ - 从 Kinect SDK 获取以毫米为单位的录制视频的深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35251478/

相关文章:

c++ - 如何在 C++ 中为曲面创建邻接矩阵

C++获得一个尚未在 vector 中使用的随机值

c# - 是否可以对kinect深度流进行预处理(在骨架引擎之前)

c# - Kinect 骨架从 v1.8 更改为 v2

c# - 在其他程序中人为生成关键事件

c++ - 何时仅创建头文件类

c++ - 如何使用 Qt 在 Linux 中读取文件设备?

c++ - 使用递归的 C++ 中的数字模式函数

c# - 将 Kinect 深度保存到二进制文件

c# - 如何使用 Kinect 跟踪一个人 (trackingID)