是的。您可以在不打开流的情况下获取彩色框架中的坐标,但是您将无法对它们执行任何有用的操作,因为您不需要索引颜色数据!
将距离转换为颜色没有意义。您需要两个图像流和一个坐标转换功能。
- 如何使用NuiImageGetColorPixelCoordinateFrameFromDepthPixelFrameAtResolution?
这是一个非常有文件记载的功能。请看看NuiImageGetColorPixelCoordinatesFromDepthPixelAtResolution,因为函数参数和文档实际上是有意义的!深度值和深度坐标(x,y)在RGB(x,y)坐标中。简单。
要在某些给定坐标处获取RGB数据,必须先使用NuiImageStreamGetNextFrame
获取RGB帧,以获取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,例如,测试哪一个实际返回应该是琐碎)
我不明白'NuiImageGetColorPixelCoordinatesFromDepthPixelAtResolution':这个函数只会返回相应深度框架的颜色框架的X/Y坐标。但我也想获得颜色信息。我如何获得?你有没有例子? – memyself
@memyself那么,你可以直接从彩色图像获取RGB值,对吧?您可以使用RGB流上的NuiImageStreamGetNextFrame来获取颜色框,然后使用pFrameTexture-> LockRect来获取RGB缓冲区。它存储为一个正常的每像素32位XRGB图像 – Rook
我明白如何抓取RGB缓冲区,但我不知道如何访问位置x,y处每个通道的像素值。 – memyself