Kinect2.0 MultiSourceFrameReader 的 AcquireLatestFrame 方法获取不到帧的解决方案
先把大致要写的东西写一下,手里的活忙完了再完善。
在代码中使用下边的语句,获取Kinect中,colorFrame, depthFrame, bodyIndex三种帧,但是经常会遇到在后边的程序中处理三个帧之后,就无法再得到新的帧了。
hr = pMultiSourceFrameReader->AcquireLatestFrame(&pMultiSourceFrame);
原因大概是因为colorFrame太大了传输时间过长,或者是后续处理图片的时间过长,然后由于某些搞不懂的原因,在上边的代码中,hr的值总是: E_PENDING The data necessary to complete this operation is not yet available.
这里,在上边这句代码中加入下边这段,可以解决此问题。
while (FAILED(hr)) { SafeRelease(pMultiSourceFrame); SafeRelease(pMultiSourceFrameReader); hr = pMyKinect->OpenMultiSourceFrameReader(FrameSourceTypes::FrameSourceTypes_Depth | FrameSourceTypes::FrameSourceTypes_Color | FrameSourceTypes::FrameSourceTypes_BodyIndex, &pMultiSourceFrameReader); Sleep(60); if (SUCCEEDED(hr)) { hr = pMultiSourceFrameReader->AcquireLatestFrame(&pMultiSourceFrame); } cout << "MultiSourceFrame" << rand() % 100 << endl; }
原理: 当获取不到帧时,先释放pMultiSourceFrame 和 pMultiSourceFrameReader 这两个资源,然后重新初始化,并获得帧。记得初始化之后,在读取帧的时候让程序Sleep一小段时间,不然由于时间太短,Kinect会反应不过来,仍然获取不到帧。
完整代码后续放出。