OpenCVでAVIを再生する
2012年11月5日:OpenCV
これまで、画像の読み込みについて解説してきました。
OpenCVでは画像だけではなく動画も読み込めます。
ここでは、OpenCVを用いて、AVIファイルを再生する方法を紹介します。
プログラムを組む
早速ですが、動画再生のプログラムを以下に示します。
CvCapture* capture; IplImage* img_frame; char* fname="test.avi"; capture=cvCreateFileCapture(fname); //メモリの確保 if(capture==NULL)return; cvNamedWindow("Window",CV_WINDOW_AUTOSIZE); while(true){ img_frame=cvQueryFrame(capture); if(img_frame==NULL)break; cvShowImage("Window",img_frame); if(cvWaitKey(30)=='\x1b')break; //Escキーで終了 } cvReleaseCapture(&capture); //メモリの解放 cvDestroyWindow("Window");
解説
まず、char型の変数にファイルのパスを指定します。
char* fname=”test.avi”;
そして、
capture=cvCreateFileCapture(fname);
でメモリを確保します。一度メモリを確保したらいずれ開放しなければなりません。よって最後に
cvReleaseCapture(&capture);
で開放します。動画からイメージを読み込む際は
img_frame=cvQueryFrame(capture);
とします。これにより、動画のある位置画像のポインタがimg_frameに書き込まれます。ここで、img_frameのメモリも確保されます。
img_frameのメモリの解放は、cvReleaseCapture(&capture);で同時に行われます。ですから、cvReleaseImageで開放する必要はありません。
あとは、
cvShowImage(“Window”,img_frame);
で取得した画像を表示ます。そして、
if(cvWaitKey(30)==’\x1b’)break; //Escキーで終了
で30msec待ちます。もしもここでEscキーが押されていたらループを抜けます。
以上で解説を終わります。動画を画像処理しながらの再生も途中に処理をいれれば可能です。一度ためしてみるといいでしょう。
著者:安井 真人(やすい まさと)
@yasui_masatoさんをフォロー