我正在寻找方法(尽可能快地)从 Kinect 相机中获取颜色像素的相应深度。
我找到了 MapDepthFrameToColorFrame 函数。但这只会给我某个深度位置的颜色,我想要相反的颜色。
我想要这个的原因是我将能够单击 RGB 图像上的一个位置并获得该像素的位置。
有没有办法比遍历 MapDepthFrameToColorFrame 的所有结果更快?
这里的问题是,由于相机和红外发射器的定位方式,并非每个颜色像素都会分配给它一个深度。如果您面对 Kinect 并将左手举在胸前,则您的胸部有一部分不会有深度数据,因为您的手挡住了 IR 发射器。由于 IR 摄像头更接近 RGB 摄像头,因此从深度到 RGB 通常不会出现同样的问题;如果 Kinect 可以看到 IR,它就可以看到 RGB。
回答您的问题:我不知道有任何方法可以做到这一点,因为 RGB 索引没有为您提供足够的信息来计算深度索引。您是否尝试过使用 MapDepthFrameToColorFrame 并像您提到的那样循环?除非您像疯子(或计算机)一样点击,否则我敢打赌该应用程序将能够很好地处理这个问题。在您确定它会导致问题之前,我不会花时间尝试优化它。
如果您愿意,您可以尝试通过检查函数返回的颜色坐标的子集来减小循环的大小。获取 RGB 像素 (x, y) 的坐标,然后检查 (x,y) 附近某处的深度坐标。也许 (x-20, y-20) 到 (x+20, y+20)。如果找不到它,您可以检查阵列的其余部分。对此进行一些测试,您可能会找到一个很好的范围来检查请求的像素,在大多数情况下您会受到打击,而不会出现很多循环。