Я написал простое приложение kinect, где я получаю доступ к значениям глубины, чтобы обнаружить некоторые объекты. Я использую следующий код, чтобы получить значение глубины
depth = NuiDepthPixelToDepth(pBufferRun);
это даст мне значение глубины для каждого пикселя. Теперь я хочу выделить область изображения и получить значения RGB-камеры для этой соответствующей области.
В чем я не уверен:
NuiImageGetColorPixelCoordinateFrameFromDepthPixelFrameAtResolution
?Я в порядке с самым простым решением, где у меня есть рамка глубины и цветная рамка, так что я могу выбрать ROI с помощью opencv и затем соответствующим образом обрезать цветную рамку.
Да. Вы можете получить координаты в цветовой рамке, не открывая поток, но вы не сможете сделать с ними ничего полезного, потому что у вас не будет цветных данных для индексации!
Там нет значимого преобразования расстояния в цвет. Вам нужны два потока изображения и функция преобразования координат.
Это ужасно документированная функция. Иди посмотри на 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. Тестирование, для которого фактически возвращается, должно быть тривиальным)
Других решений пока нет …