OpenCV。 ビデオ出力

画像



今日は、OpenCVを使用してアプリケーションでビデオを表示する方法を紹介します。 画像を操作するのと同じくらい簡単です。 過去のアクションに加えて、ビデオの各フレームを読み取るサイクルを作成する必要があります。ビデオが退屈すぎると思われる場合は、このサイクルを終了できるチームも必要です。=)

さあ始めましょう!





#include “highgui.h”



int main( int argc, char** argv )

{

cvNamedWindow( “AVI Video”, CV_WINDOW_AUTOSIZE );

CvCapture* capture = cvCreateFileCapture( argv[1] );

IplImage* frame;

while(1)

{

frame = cvQueryFrame( capture );

if( !frame ) break;

cvShowImage( “AVI Video”, frame );

char c = cvWaitKey(33);

if( c == 27 ) break;

}

cvReleaseCapture( &capture );

cvDestroyWindow( “AVI Video” );

}








画像

プログラムの結果(映画「トランスフォーマー」のフレーム)。



このレッスンでは、前回のレッスンで調べた機能については説明しません。



CvCapture* capture = cvCreateFileCapture( argv[1] );





この関数は、読み取り可能なAVIファイルのパスを渡すパラメーターを引数として取り、CvCapture構造体へのポインターを返します。 この構造には、AVIファイルに関するすべての情報が格納されます。



frame = cvQueryFrame( capture );





while(1)ループ内で、AVIファイルの読み取りを開始します。 cvQueryFrame()は、引数としてCvCapture構造体へのポインターを受け取ります。 そして、各サイクルで、ビデオの次のフレームを保存します。 ポインタはこのフレームに戻ります。



char c = cvWaitKey(33);

if( c == 27 ) break;






次のフレームを表示するとき、次のフレームを表示する前に33ミリ秒待機します(実際、任意の遅延を設定できますが、これは毎秒30フレームを表示するのに最適と考えられており、現時点では3ミリ秒かかります)。 ユーザーがキーボードのキーを押すと、cvWaitKey()関数は変数「c」にこのキーのASCIIコードを渡し、ユーザーがEsc(ASCII 27)を押すと、ループを終了します。



cvReleaseCapture( &capture );





何らかの方法でサイクルが中断され(ビデオが終了するか、Escキーが押された)、この関数を使用して、CvCapture構造体に関連付けられたメモリを解放します。

以上です! 少し後、ビデオを巻き戻すことができるように、アプリケーションにスライドバーを追加する方法について説明します。

頑張って!;)



All Articles