是的。您可以在不打開流的情況下獲取彩色框架中的座標,但是您將無法對它們執行任何有用的操作,因爲您不需要索引顏色數據!
將距離轉換爲顏色沒有意義。您需要兩個圖像流和一個座標轉換功能。
- 如何使用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