◆プログラムの例 (avi 動画ファイル再生プログラム)
#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 ("Video File", 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 ("Capture", 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 ("Capture"); return 0; }
◆プログラムの例 (avi 動画ファイルの任意のフレームを表示)
#include<cv.h> #include<highgui.h> using namespace cv; void capture (const char* avi_file_name, const int frame_num) { 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( avi_file_name ); width = cvGetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH); height = cvGetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT); fps = cvGetCaptureProperty (capture, CV_CAP_PROP_FPS); // ウインドウは開かない namedWindow ("Video File", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO); // 画像の取得 cvSetCaptureProperty (capture, CV_CAP_PROP_POS_FRAMES, frame_num); frame = cvQueryFrame (capture); // 情報の取得 msec = cvGetCaptureProperty (capture, CV_CAP_PROP_POS_MSEC); index = cvGetCaptureProperty (capture, CV_CAP_PROP_POS_FRAMES); ratio = cvGetCaptureProperty (capture, CV_CAP_PROP_POS_AVI_RATIO); cvShowImage ("Capture", frame); fprintf( stderr, "width = %f, height = %f, fps = %f, index = %f, msec = %f\n", width, height, fps, index, msec ); cvWaitKey( 10000.0 ); cvReleaseCapture (&capture); cvDestroyWindow ("Capture"); return; } int main (int argc, char **argv) { capture( "/usr/local/share/OpenCV/samples/c/tree.avi", 60 ); return 0; }
◆ Linux でのビルド手順例
g++ -o a.out hoge.cc -I/usr/local/include/opencv2 -I/usr/local/include/opencv -L/usr/local/lib -lopencv_photo -lopencv_imgproc -lopencv_highgui -lopencv_core