動画ファイルの表示
動画ファイルを表示するプログラムの例
#include<cv.h>
#include<highgui.h>
using namespace cv;
int main (int argc, char **argv)
{
double width; // 幅
double height; // 高さ
double fps; // フレームレート
double msec; // 現在位置
double index = -1; // フレームのインデックス
double ratio; // 相対位置
CvCapture *capture = NULL;
IplImage *frame = 0;
double prev_index;
int ch;
// 幅と高さの取得
capture = cvCaptureFromFile("/usr/local/share/opencv/samples/c/tree.avi");
width = cvGetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH);
height = cvGetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT);
fps = cvGetCaptureProperty (capture, CV_CAP_PROP_FPS);
namedWindow ("VideoFile", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
while (1) {
frame = cvQueryFrame (capture);
msec = cvGetCaptureProperty (capture, CV_CAP_PROP_POS_MSEC);
prev_index = index;
index = cvGetCaptureProperty (capture, CV_CAP_PROP_POS_FRAMES);
ratio = cvGetCaptureProperty (capture, CV_CAP_PROP_POS_AVI_RATIO);
cvShowImage ("VideoFile", frame);
ch = cvWaitKey ( 1000.0 / fps ); // 0 はディレイ時間 (ミリ秒単位)
if (ch == '\x1b') {
// ESC キー
break;
}
fprintf( stderr, "width = %f, height = %f, fps = %f, index = %f, msec = %f\n", width, height, fps, index, msec );
// 終わりまで来たら最初に戻る
if ( prev_index == index ) {
cvSetCaptureProperty (capture, CV_CAP_PROP_POS_AVI_RATIO, 0.0);
}
}
cvReleaseCapture (&capture);
cvDestroyWindow ("VideoFile");
return 0;
}