我需要一些有关在另一个线程中使用 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(使用前将#替换为@)