【OpenCV】 cvWaitKeyのタイムアウト時間とフレーム更新

ubuntuでOpenCVのプログラムを作る時、ビデオやカメラとかの入力から1フレーム取得して表示してという処理を繰り返すのやけど、その時のcvWaitKeyのタイムアウト時間を1msに設定すると画面更新が行われないっぽい。2ms以上だと(マシンスペックにもよると思うけど)ちゃんと表示された。
どんな感じかと言うと...

int main( void )
{
    CvCapture* capture = cvCreateFileCapture( ファイル名 );
    cvNamedWindow( "VIDEO", CV_WINDOW_AUTOSIZE );
    while( 1 ) {
        IplImage* frame = cvQueryFrame( capture );
        cvShowImage( "VIDEO", frame );
        int key = cvWaitKey( TIMEOUT ) & 0xFF;
        if ( key == 0x1B ) break;
    }
    cvDestroyAllWindows();
    cvReleaseCapture( &capture );
}

ってなコードで、ファイル名で指定した動画ファイルの各フレームを取得しながら、VIDEOというタイトルのwindowに表示できるのやけど、この時、cvWaitKeyのTIMEOUTを2ms以上にしないと描画されない(Windowに何も表示されない)現象が起きる。おそらく描画ルーチンが動くよりもこのタイムアウトが先に発生してメインスレッドがスケジューリングされてしまっているのだと思われる。

ま、一般的に動画であれば30fps辺りやから、ほぼリアルタイムで表示がしたければ TIMEOUT を 33 にしておくと概ね実際の動画と同じように表示されるはず。画像処理とかで一気に結果を確認したい時は2ms〜10ms位にしておけば、マシンパワーにもよるけど一応そのマシンの最高速で処理されるでしょう。

(1/2) 次»

OpenCV
2009/06/20




コメント(0)|コメントを書く

カテゴリー一覧
最近のコメント

このブログを友達に教える

コミュニティ | 有名人・芸能人ブログ | ケータイ占い | ケータイ小説 | 掲示板


画面TOP↑


powered by cocolog