0

コンピューターのウェブカメラから取得したフレームを格納している cvMat 型のベクターがあります。100フレーム保存した後、フレームを再生したいと思います。レコードが cvMats の私のベクトルである場合、これは次のように行われる可能性があると考えました。

cvNamedWindow("play-back",CV_WINDOW_AUTOSIZE);
cvMoveWindow("play-back",100,100);
for (vector<Mat>::iterator iter = record.begin(); iter != record.end();++iter) {
   imshow("play-back",*iter);
}

実行すると、プログラムは cvMats を保存し、Web カメラから入力を取得するのに十分なように見えますが、再生しようとすると、プログラムはコードのその部分を非常に速く実行するように見えます。結果を評価する時間がありません。再生がそれほど急がないように、このコードをどのように改善できますか?

4

1 に答える 1

3

OpenCVに制御を与えて、ウィンドウ内の各画像を実際にレンダリングし、次の画像に切り替える前に短時間保持する必要があります。 たとえば41ms(約24 fps)の遅延でcvWaitKeyへの呼び出しを追加する必要があります。次に、cvWaitKeyの戻り値を確認して、ユーザーが再生を停止できるようにします。このようなもの:

cvNamedWindow("play-back",CV_WINDOW_AUTOSIZE);
cvMoveWindow("play-back",100,100);
for (vector<Mat>::iterator iter = record.begin(); iter != record.end();++iter) {
   imshow("play-back",*iter);
   if( cvWaitKey(41) == 27 ) // ESC
       break;
}
于 2012-12-29T17:29:59.180 に答える