使用Kinect2.0的MultiSourceFrameReader,同時獲取DepthFrameSource, ColorFrameSource, BodyIndexFrameSource,然后獲取相應幀。
hr = pMyKinect->OpenMultiSourceFrameReader(FrameSourceTypes::FrameSourceTypes_Depth | FrameSourceTypes::FrameSourceTypes_Color | FrameSourceTypes::FrameSourceTypes_BodyIndex, &pMultiSourceFrameReader);
再通過,空間映射,把彩色空間映射到深度空間,因為bodyIndex的空間和深度空間相同,所以可以直接對映射到深度空間的彩色像素做相應處理。細節直接看代碼。
hr = pCoordinateMapper->MapColorFrameToDepthSpace(depthHeight * depthWidth, (UINT16*)pDepthBuffer, colorHeight * colorWidth, pDepthCoordinates);
代碼地址:
https://github.com/stone-ch/kinect2-opencv3/tree/master/KinectChangeBackground
沒有上傳工程文件,我使用的環境是:
Kinect SDK v2.0_1409 64位
Opencv3.1.0
VS2013
Win10
效果圖:
PS:背景圖片是1920 * 1080的,因為Kinect的彩色攝像頭采集到的圖像就是這個尺寸。
需要改進的地方: 平滑人物邊緣,前景背景融合。
Reference:
http://blog.csdn.net/column/details/bbdxf-kinectv2.html
http://blog.csdn.net/qq_22033759/article/category/5617829
C:\Program Files\Microsoft SDKs\Kinect\v2.0_1409\Samples\Native\CoordinateMappingBasics-D2D Kinect SDK里邊自帶的例子,這是在你電腦上的路徑