zoukankan      html  css  js  c++  java
  • 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会反应不过来,仍然获取不到帧。

    完整代码后续放出。

  • 相关阅读:
    OI算法复习汇总
    B. Anatoly and Cockroaches
    c# 文件过大时清空原有内容重新写入
    c# 记录内容到txt文件
    c# 关闭和重启.exe程序
    mutex 互斥量
    mysql 事件
    <asp:Button点击查询后,调用js中函数展现加载圈
    取得<asp:TextBox中的值:
    json 相关知识
  • 原文地址:https://www.cnblogs.com/asmer-stone/p/5485895.html
Copyright © 2011-2022 走看看