【问题标题】:OpenCV VideoCapture does not block on OS XOpenCV VideoCapture 在 OS X 上不阻塞
【发布时间】:2013-05-16 22:26:55
【问题描述】:

短版:在 OS X 上,如果我从 main() 线程以外的线程调用 VideoCapture::read(),调用会立即返回,而不是阻塞直到新帧。

这个按预期工作:

void main()
{
    VideoCapture vc(0);

    Mat img;
    While(1) {
        vc.read( img ); // blocks till new frame arrives
    }    
}

这个不屏蔽:

void run( VideoCapture& vc )
{
    Mat img;
    While(1) {
        vc.read( img ); // returns immediately and always returns true
    }    
}

void main()
{
    VideoCapture vc(0);
    boost::thread capThread( boost::bind( &run, vc ) );
    capThread.join();
}

所以在第二个版本中,使用单独的线程来抓取帧,对 VideoCapture::read(img) 的调用立即返回,返回值为 true,并且 img 设置为当前帧,这意味着它将返回许多重复的帧帧。

这里提到过:

Problem accessing camera when using Boost thread on OSX

那个:

“Mac 上的 OpenCV 摄像头功能需要访问 Objective-c NSRunLoop;不过不知道如何从新线程中获取。”

有人知道从 main() 线程以外的线程进行阻塞帧抓取的解决方案吗? 或者,有没有丢弃重复帧的好方法?

谢谢

【问题讨论】:

    标签: multithreading macos opencv camera capture


    【解决方案1】:

    OpenCV 不支持多线程。

    让主线程捕获帧并在第二个线程中执行您需要执行的任何操作。

    【讨论】:

    • 如果我需要它不阻塞,但想使用轮询而不是线程怎么办?这可能吗?
    猜你喜欢
    • 2011-05-03
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 2012-07-26
    相关资源
    最近更新 更多