OpenCV和Qt VideoCapture不能在Windows上打开正确的摄像头

我正在使用opencv和Qt创build一个应用程序。 在应用程序内部,我创build了一个loggingvideo的小工具。 由于这个原因,而不是阻塞主事件线程,我创build了一个单独的对话框,其中包含一个logging线程。 在这个线程初学者,我只想看到相机输出(我还没有介绍录音代码)。 所以我subclassed QThreadrun()函数如下:

 void VideoRecordThread::run(){ cv::VideoCapture capture; cv::Mat frame; QImage img; qDebug() << "Opening camera" << cameraIndex ; capture.open(cameraIndex); if(!capture.isOpened()){ qDebug() << "Could not open camera" << cameraIndex; emit threadReturned(); return; } while(!stopFlag){ capture >> frame; qDebug() << "Frame Width = " << frame.cols << "Frame Height = " << frame.rows; if(frame.cols ==0 || frame.rows==0){ qDebug() << "Invalid frame skipping"; continue; } img = cvMatToQImage(frame); //Custom function emit imageCaptured(img); } capture.release(); emit threadReturned(); //Custom signal qDebug() << "Thread returning"; } 

这是应该的工作,但问题是,当线程启动,我得到一个新的对话“突然间”要求我select相机,当我select连接的摄像机之一,它有时工作,有时它不'吨。 这是我得到的对话框:

在这里输入图像说明

任何帮助,我可以做什么?

Solutions Collecting From Web of "OpenCV和Qt VideoCapture不能在Windows上打开正确的摄像头"

我注意到,当一些函数没有从主线程执行时,OpenCV有问题。

将捕获过程的初始化移动到您的应用程序的主线程,并将其余部分留在您的辅助线程上。 初始化部分似乎是:

 cv::VideoCapture capture; qDebug() << "Opening camera" << cameraIndex ; capture.open(cameraIndex); if(!capture.isOpened()) { qDebug() << "Could not open camera" << cameraIndex; emit threadReturned(); return; }