我正在使用 opencv 和 Qt 创建应用程序。在应用程序内部,我正在创建一个小工具来录制视频。出于这个原因,为了不阻塞主事件线程,我创建了一个包含录制线程的单独对话框。在这个针对初学者的线程中,我只想查看相机输出(我还没有介绍录制代码)。所以我进行了子类QThread
化,run()
功能如下:
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";
}
这应该可以工作,但问题是当线程启动时,我得到一个“突然”的新对话框,要求我在选择其中一个连接的相机时选择相机,它有时工作,有时它不工作吨。这是我得到的对话框:
关于我能做什么的任何帮助?