opencvとQtを使ってアプリケーションを作成しています。アプリケーションの中で私はビデオを録画するための小さなツールを作成しています。このため、メインイベントスレッドをブロックしないように、私は記録スレッドを含む別のダイアログを作成しました。私はこのカメラの出力を見たいと思っていました(私は録音コードをまだ紹介していません)。だから私はQThread
をサブクラス化し、run()
機能は以下の通りです:OpenCVとQt VideoCaptureでウィンドウ上の正しいカメラが開けない
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つを選択すると、時々動作し、ときどき動作しない場合があります。ここで私が得るダイアログは次のとおりです。
私が何ができるか上の任意のヘルプ?
「cameraIndex」の値は? – karlphillip
cameraIndexが0 – msmechanized
カメラが1台しかない場合、またはカメラが使用されているかどうかは関係ありません。-1を渡すことができます。 Windowsでは、ユーザーがビデオソースを選択するために、インデックス0がそのダイアログを開きます。 – karlphillip