jah*_*aho 18 c++ image-processing kinect kinect-sdk
我正在使用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's within frame boundaries
if (pos < 640 * 480)
{
mappedRun[i] = colorRun[pos];
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
我在运行此代码时获得的是一个未更改的颜色框架,其中删除了(白色)所有像素,其中depthFrame没有信息.
OpenNI 框架有一个选项调用注册。
\n\nIMAGE_REGISTRATION_DEPTH_TO_IMAGE \xe2\x80\x93 深度图像被转换为具有与 RGB 图像相同的视点。
\n\nOpenNI 2.0 和 Nite 2.0 可以很好地捕获 Kinect 信息,并且有很多教程。
\n\n你可以看看这个:
\n\n\n\nOpenNi 在 SimplerViewer 中有一个合并深度和颜色的示例,也许你可以看看并尝试一下。
\n