我需要一些帮助,在另一个线程中使用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;
}
非常感谢,如果有人能指出我弄错了。谢谢。