OpenCVでAVIを再生する

これまで、画像の読み込みについて解説してきました。

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キーが押されていたらループを抜けます。

以上で解説を終わります。動画を画像処理しながらの再生も途中に処理をいれれば可能です。一度ためしてみるといいでしょう。

著者:安井 真人(やすい まさと)