Я работаю с датчиком Kinect, и я пытаюсь выровнять рамки глубины и цвета, чтобы я мог сохранять их как изображения, которые "вписываются" друг в друга. Я провел много времени, проходя через форумы msdn и скромную документацию Kinect SDK, и я абсолютно ничего не получаю.
На основе этого ответа: Kinect: Преобразование из координат RGB в координаты глубины
У меня есть следующая функция, где depthData
и colorData
получены из NUI_LOCKED_RECT.pBits
, а mappedData
- это вывод, содержащий новый цветной кадр, отображаемый в координаты глубины:
bool mapColorFrameToDepthFrame(unsigned char *depthData, unsigned char* colorData, unsigned char* mappedData)
{
INuiCoordinateMapper* coordMapper;
// Get coordinate mapper
m_pSensor->NuiGetCoordinateMapper(&coordMapper);
NUI_DEPTH_IMAGE_POINT* depthPoints = new NUI_DEPTH_IMAGE_POINT[640 * 480];
HRESULT result = coordMapper->MapColorFrameToDepthFrame(NUI_IMAGE_TYPE_COLOR, NUI_IMAGE_RESOLUTION_640x480, NUI_IMAGE_RESOLUTION_640x480, 640 * 480, reinterpret_cast<NUI_DEPTH_IMAGE_PIXEL*>(depthData), 640 * 480, depthPoints);
if (FAILED(result))
{
return false;
}
int pos = 0;
int* colorRun = reinterpret_cast<int*>(colorData);
int* mappedRun = reinterpret_cast<int*>(mappedData);
// For each pixel of new color frame
for (int i = 0; i < 640 * 480; ++i)
{
// Find the corresponding pixel in original color frame from depthPoints
pos = (depthPoints[i].y * 640) + depthPoints[i].x;
// Set pixel value if it within frame boundaries
if (pos < 640 * 480)
{
mappedRun[i] = colorRun[pos];
}
}
return true;
}
Все, что я получаю при запуске этого кода, - это неизменный цветной фрейм с удаленным (белым) всеми пикселями, в которых depthFrame не имел информации.