我正在使用从Kinect用c++语言录制的视频进行项目。我试图获取一个点的真实世界坐标(真实深度)。但是我不知道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),则应使用以下公式:



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

    如果要用军用限制器表示realDepth,只需将其除以1000。

    还要注意,某些黑色像素也可能代表未知值。因此,如果realDepth等于0.8,则不能确定此值正确,还是实际上是未知值。

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

    10-13 04:33