opencv VideoCapture 在线程中被阻塞

2024-02-03

我需要一些有关在另一个线程中使用 opencv VideoCapture 的帮助。

当我使用视频截取 http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture在主线程中,它非常好并且可以流畅地显示视频。但是,一旦我将代码放入另一个线程并期望它做同样的事情,VideoCapture 似乎根本不起作用。

我做了一些尝试:如果我使用 0(默认值)作为参数初始化 VideoCapture,它会被阻止。但如果我不初始化它

VideoCapture cap; 

或使用其他号码

VideoCapture cap(1); 

它打印出错误消息并退出但不会被阻止。

这是代码:

#include <iostream>
#include <thread>
#include <functional>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

using namespace std;
using namespace cv;

class MyClass {
public:
    // display the video
    static void display(int i) {
        VideoCapture cap(0);

        if (!cap.isOpened()) {
            cout << "cannot access webcame" << endl;
            exit(-1);
        }

        Mat imgOriginal;
        namedWindow("Original", WINDOW_AUTOSIZE);
        while (true) {
            bool success = cap.read(imgOriginal);
            if (!success) {
                cout << "fail to read video into mat" << endl;
                break;
            }
            imshow("Original", imgOriginal);

            if (waitKey(30) == 27) {
                break;
            }
        }
    }
};

int main()
{
    //cout << "Hello World!" << endl;
    thread myThread(bind(MyClass::display, 0));
    myThread.join();

    return 0;
}

如果有人能指出我哪里错了,我将非常感激。谢谢。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

opencv VideoCapture 在线程中被阻塞 的相关文章

随机推荐