OpenCVを用いて任意の時間で静止画を保存したい。
OpenCVを用いて"s"キーを押したら静止画保存が始まり、再度"s"キーを押したら保存が終了しるプログラムを作成しています。(保存レートは1秒間で30フレームの静止画保存で考えています)また、保存する静止画を指定したフォルダに保存するプログラムを作成していますが、プログラム作成の経験が浅く、なかなかうまく作れず困っております。どのようにプログラムを組めばこのようなプログラムが作れるのでしょうか。下記のプログラムは作成でき、これを基礎にして作り上げていこうと考えています。プログラムの内容としては"c"キーを押した分だけ、連番でbip形式で画像を保存するプログラムです。精度の関係上timegettime関数を使用したいと考えているのですが、、。
<ソースプログラム>
#include <stdio.h>
#include <highgui.h>
int main( int argc, char** argv ){
int key; // キー入力用変数
int counter = 0;
CvCapture *capture; // キャプチャ用構造体
IplImage *frameImage; // キャプチャ画像用IplImage
char str[32];
char windowNameCapture[] = "CMOS Camera Image"; // ウィンドウネーム
// カメラの初期化
if( ( capture = cvCreateCameraCapture(-1)) == NULL ){
// カメラデバイスが検出できない場合
printf("カメラデバイスを検出できません\n");
return -1;
}
// ウィンドウ生成
cvNamedWindow( windowNameCapture, CV_WINDOW_AUTOSIZE );
// メインループ
while(1){
// カメラからの1フレームをframeImageに格納
frameImage = cvQueryFrame( capture );
// 画像表示
cvShowImage( windowNameCapture, frameImage );
// 'ESC'キーが入力されたらループを抜ける
key = cvWaitKey(1);
if( key == '\x1b' ){
break;
// 静止画保存
} else if( key == 'c'){
sprintf_s(str, "cmosview%04d.bmp",counter++);
cvSaveImage(str, frameImage );
}
}
// キャプチャ解放
cvReleaseCapture( &capture );
// ウィンドウ破棄
cvDestroyWindow( windowNameCapture );
return 0;
}
お礼
こんなに親切にしていただいてなんとお礼をいったらいいものか・・・本当にありがとうございます。 GOMPlayerは過去の質問欄を参考に、ここに質問を載せる前に実行してみたのですが、やはり再生できませんでした。 後半の方法はあまりにも私には高度な技のようなので、アドバイスいただいたとおり、再生ソフトを購入することを検討いたします。 素人相手に説明するのはさぞ大変でしたでしょうに、本当に分かりやすいご指導ありがとうございました。 私にとって最初の質問でしたので、本当にうれしかったです。 今後、またパソコンについてわからなくなったら是非ご指導願います。