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会反应不过来,仍然获取不到帧。

    完整代码后续放出。

  • 相关阅读:
    C++11中右值引用和移动语义
    面试题3:自己实现单链表
    C++中指针和引用、数组之间的区别
    C++中对象模型
    C++中虚函数的动态绑定和多态性
    C++11中多线程库
    C++中友元
    C++中迭代器原理、失效和简单实现
    C++11中智能指针的原理、使用、实现
    C++中模板与泛型编程
  • 原文地址:https://www.cnblogs.com/asmer-stone/p/5485895.html
Copyright © 2011-2022 走看看