我试图通过使用带有cv :: VideoCapture和std :: thread的多线程来显示多个视频。如果我只是调用function work(),它就可以了!但是当我把它放入一个线程时,没有显示任何内容。我在这里错过了吗?或者你有更好的做法吗?谢谢!
P.S。我正在使用Mac OS X 10.10.2,Opencv 2.4.9
以下是代码:
void work(std::string address, std::string window) {
cv::VideoCapture cap(address);
if (!cap.isOpened()) {
std::cout << "Cannot open camera" << std::endl;
return;
}
cv::Mat frame;
while (char(cv::waitKey(1)) != 'q' && cap.isOpened()) {
cap >> frame;
if(frame.empty()) {
std::cout << "Video over" << std::endl;
break;
}
cv::imshow(window, frame);
}
}
int main(int argc, char *argv[]) {
std::thread t1(work, "/Path/to/test.mp4", "test");
t1.join();
// work("/Path/to/test.mp4", "test"); // it works if just call function work()
std::cout << "Done..." << std::endl;
}
答案 0 :(得分:0)
旧帖子,但在致电cv::waitKey(5);
后你可能会错过cv::imshow
。
答案 1 :(得分:0)
在一个额外的线程中使用cv :: imshow()可能不是一个好主意。 cv :: imshow()仅适用于主线程。