opencv VideoCapture在线程中被阻止

时间:2014-05-13 07:04:03

标签: c++ multithreading opencv

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

当我在主线程中使用VideoCapture时,它非常精细并且可以顺畅地显示视频。但是,一旦我将代码放在另一个线程中,并期望它做同样的事情,似乎VideoCapture根本不起作用。

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

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

非常感谢,如果有人能指出我弄错了。谢谢。

0 个答案:

没有答案