« 2009年5月 | トップページ | 2009年7月 »

2009年6月の2件の記事

【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】共有フォルダ

久しぶりにVirtualBoxネタ。
共有フォルダの設定方法を覚書きしておこう。
VirtualBoxではホスト側(VirtualBoxを動かしているマシン)の任意のフォルダをゲスト側(VirtualBox上で動いているOS)と共有する事ができる。もちろんNetwork越しにSambaやCIFSで共有する事もできるけど、ホスト<->ゲストだけやったら共有フォルダを使うのが楽。

VirtualBox Windowの右下の↓のようなアイコンがありまする。
Virtualbox
この内、左から6番目、つまり

Virtualbox_2
このアイコンを右クリックしまする。
(ちなみに上記の図は、既に共有フォルダが設定済みの環境で、かつ共有フォルダにアクセスしている最中のスクリーンショットなので、フォルダ絵の右下に丸いアイコンが出てるけど、通常時はフォルダ絵のみなはず)

そうすると以下の共有フォルダの設定画面が出るので、そこで共有したいホスト側のフォルダと共有名を設定しまする。
ま、大抵は一時的な共有でええやろけど、起動する度に設定するのが面倒っていう事なら共有フォルダに登録してしまうのが良いかと。
Screenshot

あとはゲストOS側の設定。
共有フォルダで設定したフォルダは vboxsvr という仮想マシン名のフォルダとして見えるみたい。
という事で、ゲストがWindowsやったらExplorerでも開いて

\\vboxsvr\共有フォルダ名(上記の例だと "kan")

とすれば、見えるはず。
もちろんネットワークドライブの割り当てから設定すれば任意のドライブにマップする事も可能です。

(2009/01/03追記)

ご指摘を受けて、vboxsrv -> vboxsvr と修正しました。

その後の調査で、WindowsXP on ubuntu 8.04 環境では WindowsXP 中で vboxsvr, vboxsrv のいずれも使用できる事が分かりました。ネットワークドライブの割り当てで

\\vboxsvr\kan

\\vboxsrv\kan

のいずれでもマウントする事ができました。

環境依存の可能性がありますので、うまくいかない方は両方をお試しください。

« 2009年5月 | トップページ | 2009年7月 »