是的。您可以在不打开流的情况下获取颜色框架中的坐标,但是您将无法对它们做任何有用的事情,因为您将没有颜色数据可以索引!
没有将距离有意义地转换为颜色。您需要两个图像流和一个坐标转换函数。
- 如何使用 NuiImageGetColorPixelCoordinateFrameFromDepthPixelFrameAtResolution?
这是一个非常有记录的功能。去看看NuiImageGetColorPixelCoordinatesFromDepthPixelAtResolution,因为函数参数和文档实际上是有意义的!深度值和深度 (x,y) 坐标输入,RGB (x,y) 坐标输出。简单的。
要获取某个给定坐标的 RGB 数据,您必须首先获取一个 RGB 帧,NuiImageStreamGetNextFrame
用于获取INuiFrameTexture
实例。调用LockRect
它以获得NUI_LOCKED_RECT
. 该pBits
对象的属性是指向原始 XRGB 图像的第一个像素的指针。该图像以从上到下从左到右的顺序逐行存储,每个像素由 4 个连续字节表示,表示一个填充字节,然后是 R、G 和 B。
(100, 200)
因此,位置处的像素位于
lockedRect->pBits[ ((200 * width * 4) + (100 * 4) ];
并且代表红色通道的字节应该在
lockedRect->pBits[ ((200 * width * 4) + (100 * 4) + 1 ];
这是一种标准的 32 位 RGB 图像格式,缓冲区可以自由地传递给您选择的图像处理库...... GDI、WIC、OpenCV、IPL 等等。
(警告......我不完全确定我的像素字节排序是否正确。我认为它是 XRGB,但它可能是 XBGR 或 BGRX,例如。测试实际返回的应该是微不足道的)