ファイルからビデオを表示し、キーを押したときにフレームを個々の画像として保存する小さなプログラムを作成しようとしています。
フレームの保存中にビデオがフリーズすることを除けば、問題なく動作しているように見えます。これにより、フレームの保存をいつ停止するかを判断するのが非常に困難になります。誰かがこの問題を回避する方法を知っているかどうか疑問に思っています。
これはそのままのプログラムです:
#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
#include <iostream>
int main( int argc, char** argv[] ) {
int cnt = 1;
char c;
cvNamedWindow( "Video", CV_WINDOW_AUTOSIZE );
CvCapture* capture = cvCreateFileCapture( "D:\\AVI Video\\SGVideo.mp4" );
IplImage* frame;
while(1) {
char num[40]="D:\\Bilder\\SGVSamples\\";
char str[10];
char pmp[10]=".jpg";
_itoa(cnt, str, 10);
strcat(num,str);
strcat(num,pmp);
frame = cvQueryFrame( capture );
if( !frame ) {
cout << "End of video!\n";
break;
}
cvShowImage( "Video", frame );
c = cvWaitKey(34);
// 'Space' -> Save frame :: 'Esc' -> Exit
if( c == 32 ) {
try {
cvSaveImage( num, frame );
cout << "Saved image: " << num <<" - Frame count: " << cnt << "\n";
} catch(...) {
cout << "Failed to save image!\n";
}
} else if( c == 27 ) {
cout << "Shutting down...";
break;
}
cnt = cnt+1;
}
cvReleaseCapture( &capture );
cvDestroyWindow( "Video" );
}
私は一般的にOpenCVとcppにかなり慣れていないので、どんなヒントでも大歓迎です!