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;
    }

 

原理: 當獲取不到幀時,先釋放pMultiSourceFramepMultiSourceFrameReader 這兩個資源,然后重新初始化,並獲得幀。記得初始化之后,在讀取幀的時候讓程序Sleep一小段時間,不然由於時間太短,Kinect會反應不過來,仍然獲取不到幀。

 

完整代碼后續放出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM