アプリ版:「スタンプのみでお礼する」機能のリリースについて

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;
}

A 回答 (1件)

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() などを使って下さい。
    • good
    • 1
この回答へのお礼

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

お礼日時:2008/07/30 12:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!