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";
}
これは機能するはずですが、問題は、スレッドが開始すると、接続されているカメラの1つを選択すると、カメラを選択するように求める新しいダイアログが「突然」表示されることです。機能する場合と機能しない場合があります。 t。これが私が得るダイアログです:
私に何ができるかについて何か助けはありますか?