我根据Kinect自带的那个绿色抠人Demo,大家有没有发现抠出来的人比彩色图像中人变大了,该Demo是根据一个函数NuiImageGetColorPixelCoordinateFrameFromDepthPixelFrameAtResolution来对齐,导致我根据帧差法得到的前景图无法与抠出人的大小对齐,因此无法修复抠出来人边缘的抖动。下面,我介绍一个函数MapColorFrameToDepthFrame,次函数是将一帧的彩色图像映射到深度图像,然后抠出来的人才是和彩色图像中的人是一样大的。次函数的用法也比较有意思,看代码:
HRESULT ProcessDepth(Mat &depth)
{
HRESULT hr = S_OK;
NUI_IMAGE_FRAME imageFrame;
//得到当前帧深度消息图像信息
hr = g_pNuiSensor->NuiImageStreamGetNextFrame(g_pDepthStreamHandle, 0, &imageFrame);
if (FAILED(hr))
{
return hr;
}
BOOL nearMode;
INuiFrameTexture* pColorToDepthTexture;
hr = g_pNuiSen