現在地 >> メニュー >> サンプルコード::OpenCV >> OpenCV::動画として保存


問題


OpenCV::アニメーションの出力結果を動画として保存せよ。

答え


#include <cv.h>
#include <highgui.h>
#include <cstdio>
#include <cmath>
#include <iostream>

using namespace std;

inline void CV_MAIN_LOOP();


CvSize window={300,300};//ウィンドウサイズ

IplImage *imgA;
int main( int argc, char **argv)
{

imgA = cvCreateImage(window,IPL_DEPTH_8U,3);
cvSet (imgA, cvScalarAll (255), 0);

cvNamedWindow("window",CV_WINDOW_AUTOSIZE);
cvShowImage("window",imgA);


CV_MAIN_LOOP();



cvReleaseImage( &imgA );
cvDestroyWindow("window");

return 0;
}


/********** ここからメインループ ********************/
inline void CV_MAIN_LOOP()
{

#define PI_OVER_180 0.0174532925

int frame=0;
char key;
int x,y;


CvVideoWriter *vw;
vw = cvCreateVideoWriter ("cap.avi", -1, 15, cvGetSize (imgA));


while(1)
{
cvSet (imgA, cvScalarAll (255), 0);
x = window.width/2 + int(50*cos(frame*PI_OVER_180));
y = window.height/2 + int(50 *sin(frame*PI_OVER_180));
cvCircle(imgA,cvPoint(x,y),3,cvScalar(255,0,0),CV_FILLED);

cvWriteFrame (vw, imgA);

cvShowImage("window",imgA);


key=(char)cvWaitKey(1);
if(key=='\033') break;

frame+=1;
if(frame>360) frame = 0;
}

cvReleaseVideoWriter (&vw);

}

メモ


cvCreateVideoWriter ("cap.avi", -1, 15, cvGetSize (imgA));
で「-1」を指定するとwindowsがコーデックを聞いてくる。

単純な保存のため、動画の容量が大きくなるので要注意。
(点1周で2Mくらいになってしまう...)

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます