这一部分主要是关于多线程的问题,因为使用过程中为了保证实时性,使用多线程是必要的,多线程的使用很复杂,但是在这里我们只用最基本的功能,所以还是比较简单的。首先是多线程所使用的函数的定义。
DWORD WINAPI ReadDepthMapThread(LPVOID lpParamter)
{
while (1)
{
g_Context.WaitAndUpdateAll();
g_ImageGenerator.GetMetaData(imageMD);
Mat cvRGBImage(imageMD.FullYRes(),imageMD.FullXRes(),CV_8UC3,(char*) imageMD.Data());
cvtColor(cvRGBImage,cvBGRImage,CV_RGB2BGR);
MouseControl();
imshow("User skeleton",cvBGRImage);
waitKey(30);
}
return true;
}
更新数据,并通过opencv进行RGB图像的显示。
主程序中通过如下方式注册多线程
HANDLE hThread_ReadDepthMap=NULL;
hThread_ReadDepthMap=CreateThread(0,0,ReadDepthMapThread,0,0,0);
if (!hThread_ReadDepthMap)
{
printf("thread create failed!");
return;
}