我正在寻找(尽可能快)从Kinect相机获得相应深度的彩色像素。
我找到了MapDepthFrameToColorFrame函数。但这只能给我一定深度位置的颜色,我想要相反的。
我想要的原因是我可以点击RGB图像上的位置并获得该像素的位置。
有没有办法比循环MapDepthFrameToColorFrame的所有结果更快地完成这项工作?
答案 0 :(得分:6)
这里的问题是,由于相机和红外发射器的定位方式,并非每个颜色像素都会分配深度。如果您正面对Kinect并将左手握在胸前,那么您胸部的一部分将无法获得深度数据,因为您的手阻挡了IR发射器。由于红外摄像机距离RGB摄像机较近,因此从深度到RGB一般不会出现同样的问题。如果Kinect可以看到IR,它可以看到RGB。
回答你的问题:我不知道有什么方法可以做到这一点,因为RGB索引没有给你足够的信息来计算深度索引。您是否尝试使用MapDepthFrameToColorFrame并像您提到的那样循环?除非你像疯子(或电脑)一样点击,否则我愿意打赌应用程序能够很好地处理这个问题。我不会花时间尝试优化它,直到你确定它会导致问题。
如果您愿意,可以通过检查函数返回的颜色坐标的子集来尝试减小循环的大小。获取RGB像素(x,y)的坐标,然后检查接近(x,y)的深度坐标。也许(x-20,y-20)到(x + 20,y + 20)。如果找不到,可以检查数组的其余部分。稍微测试一下,您可以找到一个很好的范围来检查所请求的像素,你会在大部分时间内获得命中,而不需要大量的循环。