こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

OpenCVによる連続静止画保存

OpenCVとVisual Studio 2005を使ってカメラ画像を出力し、キーを押すことで画像をファイルに保存しています。しかし、キーを押すたびに画像が上書きされてしまい、結局保存ファイルは一つだけになってしまい連続して画像ファイルが取得できません。下記のプログラムで下のほうに書いてあるcvSaveImage()関数にうまくカウンタを使ってやればいいと思うのですが、私の技量ではできませんでした。知っている方がいたら教えてください。よろしくお願いします。

//---------------------------------------------------------
// 概要 : カメラからの入力画像をそのまま表示
// File Name : image.c
// Library : OpenCV for MS-Windows 1.0
//---------------------------------------------------------

#include <stdio.h>
#include <highgui.h>

int main( int argc, char** argv ){
int key;//キー入力用の変数
CvCapture *capture;//カメラキャプチャ用の構造体
IplImage *frameImage;//キャプチャ画像用IplImage
char windowNameCapture[] = "Capture";//キャプチャした画像を表示するウィンドウの名前

//カメラを初期化する
if ( ( capture = cvCreateCameraCapture( -1 ) ) == NULL ) {
//カメラが見つからなかった場合
printf( "カメラが見つかりません\n" );
return -1;
}

//ウィンドウを生成する
cvNamedWindow( windowNameCapture, CV_WINDOW_AUTOSIZE );

//メインループ
while ( 1 ) {
//カメラからの入力画像1フレームをframeImageに格納する
frameImage = cvQueryFrame( capture );

//画像を表示する
cvShowImage( windowNameCapture, frameImage );

//'q'キーが入力されたらループを抜ける
key = cvWaitKey( 1 );
if ( key == 'q' ) {
break;
}else if( key == 'c'){
cvSaveImage("picture.bmp", frameImage );
}


}

//キャプチャを解放する
cvReleaseCapture( &capture );
//ウィンドウを破棄する
cvDestroyWindow( windowNameCapture );

return 0;
}

投稿日時 - 2008-07-29 17:54:27

QNo.4213086

すぐに回答ほしいです

質問者が選んだベストアンサー

OpenCV というよりも単に文字列の問題ですよね?
例えば以下のようにします。


int main( int argc, char** argv ){
  // 以下二行追加
  int counter = 0;
  char str[32];

  /* 省略 */

    key = cvWaitKey( 1 );
    if ( key == 'q' ) {
      break;
    } else if( key == 'c'){

      // 以下二行追加、修正
      sprintf(str, "img_%04d.bmp", counter++);
      cvSaveImage(str, frameImage );
    }

  /* 省略 */


VC2005 では sprintf() に警告が出るかもしれませんので、
問題があれば sprintf_s() などを使って下さい。

投稿日時 - 2008-07-30 05:09:18

お礼

初心者ですみませんです><
プログラムのほうは無事できました。
ホントありがとうございます。

投稿日時 - 2008-07-30 12:53:19

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問