我正在为我的项目使用使用 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/