« 【VirtualBox】共有フォルダ | トップページ | 【PS3】 ubuntu 8.10/9.04 on PLAYSTATION3 »

【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位にしておけば、マシンパワーにもよるけど一応そのマシンの最高速で処理されるでしょう。

とまぁ、ちょっとだけハマった話から覚え書き。

« 【VirtualBox】共有フォルダ | トップページ | 【PS3】 ubuntu 8.10/9.04 on PLAYSTATION3 »

OpenCV」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 【OpenCV】 cvWaitKeyのタイムアウト時間とフレーム更新:

« 【VirtualBox】共有フォルダ | トップページ | 【PS3】 ubuntu 8.10/9.04 on PLAYSTATION3 »