AVI ファイルの真ん中の画像を取得する
久々の OpenCV プログラミング.cvQueryFrame() 用の IplImage のメモリ確保・解放いずれも不要っていう仕様につまづいた.cvReleaseImage() でキレられた.確保時にはがんばって cvSize(cvGetCaptureProperty(), cvGetCaptureProperty() ) を書いたけれども不要に.
#include "cv.h" #include "cxcore.h" #include "highgui.h" #include <stdio.h> int main(int argc, char **argv) { char *filename="138.avi"; IplImage *image; CvCapture *capture; double frame_count; capture = cvCaptureFromAVI(filename); if(capture == NULL) { printf("動画読み込み不能\n"); return 0; } // 総フレーム数を取得する frame_count = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT); // 真ん中の位置に移動する cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, frame_count/2); // 画像を取り出す image = cvQueryFrame(capture); // 表示してみる char *window_name = "真ん中の画像"; cvNamedWindow(window_name); cvShowImage(window_name, image); printf("この動画の総フレーム数は %.0lf です.\n", frame_count); cvWaitKey(); // 保存する cvSaveImage("still.png", image); // メモリ開放 cvReleaseCapture(&capture); return 0; }