先把大致要寫的東西寫一下,手里的活忙完了再完善。
在代碼中使用下邊的語句,獲取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會反應不過來,仍然獲取不到幀。
完整代碼后續放出。