2012-02-28 18 views
1

何かが起きるまで(ループ中)待つか、サークル検出を行う前に10秒待ちますが、ビデオは表示されます。 whileループで試してみましたが、条件が満たされていないと、フレームが表示されません。なぜなら、コードはcvShow \ iamge()を取得しないからです。opencv circle with video

答えて

1

はい、それは可能ですが、あなたは、スレッドを使用する必要があります。グローバル変数bool exec_circle_detection = false;を宣言し、2番目のスレッドを開始します。このスレッドでは、sleep(10)を呼び出して10秒待ってからexec_circle_detectionに変更して、に変更します。ブール変数がtrueに設定されている場合、フレームグラブループ内のメインスレッドで

は、あなたがチェックし、そうでない場合には、あなたはフレームを処理しません。あなたは10秒ごとに1回は、あなたがカスタム処理を実行した後、falseに exec_circle_detectionを変更する必要があります円検出を行うことを計画している場合

char key = 0; 
while (key != 27) // ESC 
{  
    frame = cvQueryFrame(capture); 
    if (!frame) 
    { 
     fprintf(stderr, "!!! cvQueryFrame failed!\n"); 
     break; 
    } 

    if (exec_circle_detection) 
    { 
     // execute custom processing 
    } 

    // Display processed frame 
    cvShowImage("result", frame); 

    // Exit when user press ESC 
    key = cvWaitKey(10); 
} 

:この部分は(Cで)このようになります。セカンダリスレッドでwhileループがexec_circle_detectionを10秒ごとに変更するようにコードを調整します。

+0

ありがとうございました。私はサークル検出を行い、その後10秒間ビデオを表示する以外は何もしないようにします。次のコード行に戻ります。 –

+0

驚くべきことに、私の答えをupvoteするか、その近くのチェックボックスをクリックしてあなたの質問への正式な答えとしてそれを選択することを自由にしてください。または両方を行う: – karlphillip

+0

おそらく複雑な質問。私はサークルを検出している私のコードの一部を持っています。私はそれが10秒を数え、円を検出し、コードの次の行に実行せずにビデオを表示したいですか? –

0

Xフレームごとに検出を実行するだけで済みます。コードにフレームカウンタを追加し、検出が実行されると0に再起動し、グラブされた新しいフレームごとに1ずつ増やし、カウンタが300のときに検出を実行すると、ビデオは30 fpsと表示されます。各検出間に10秒の遅延があります。

+0

アプリケーションが異なるタイプのカメラで動作すると想定される場合はどうなりますか?より信頼できる解決策は、私の答えに記述されているように、タイミングメカニズムを使用することです。 – karlphillip