• 締切済み

OpenCvライブラリを用いて、C++を使い画像処理をしています。

OpenCvライブラリを用いて、C++を使い画像処理をしています。 私は今、人が映ったら保存するプログラムができています。 そこで、人が映るたび、ファイル名を自動的に変えてフォルダに保存していくプログラムが作れなくて困っています。 どのようにcvSaveImage関数を使えばよいのか教えてください。

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

これは、OpenCVというよりは、重複しないファイル名の作り方、ということになると思います。 cvSaveImage自体には、重複チェックやファイル名の自動変更は無いです。 ・連番を付ける。 グローバル変数、(プロセスの最初から最後までメモリ上にあるようなクラスの)メンバ変数、static変数、設定ファイル、レジストリ等、以前の数値を記憶しておくしくみを用意して、保存するときは sprintf(filename, "%08d.png", fileno ) ; 等を使ってファイル名にして使う。使ったら1増やす。 ・現在時刻をファイル名にする。 例えば、2010年10月26日20時45分37秒だったら 2010-10-26-20-45-37.png 等。保存周期が1秒より短かいなら、ミリ秒単位まで使ったり、連番と併用したりする。 ・ファイルの存在チェックを行い、重複しない名前に変更する。 上の方法なりランダムなり定数なりで名前を作ったら、そのファイルが既にあるかどうかをチェックする。 新規ファイルなら、そのまま使う。 既にあるなら、少しだけ変えて(後に連番付けるとか、一文字ずつ長くしていくとか)再チェック、新規ファイルになるまで繰り返す。

takumoru
質問者

お礼

ありがどうございます。 とても参考になりました。 ガンバってみます。

関連するQ&A

  • OpenCvライブラリを使い、C++を用いてウェブカメラを監視カメラみ

    OpenCvライブラリを使い、C++を用いてウェブカメラを監視カメラみたいな役割をさせようとしています。 そこで、1秒ごとに画像をキャプチャし、10秒(10枚)までを指定したフォルダに保存する。 (例)     ファイル名   1秒の画像   file1.bmp 2秒の画像   file2.bmp ・ ・ ・ ・   10秒の画像   file10.bmp と、こんな風に そして、保存していた背景画像と、1~10枚撮った画像を比較していき、違いが出たら、 違いが出た画像だけを別のフォルダに保存するというプログラムを作ろうとしています。 OpenCv,C++初心者なので、うまく伝えられているか分かりませんが、宜しければプログラムを教えてください。

  • opencvによる画像処理。

    opencvによる画像処理。 今opencvを使った画像処理をしているのですが、これって普通のプログラム中に関数みたいな感じで使う事って出来ないのでしょうか? 例えば、Cで車両を制御するプログラムを作ってる場合に、車両が何mm進んだ時点で車両に取り付けたカメラを使って、画像処理を行う。みたいな処理をしたいです。 でもopencvのmain文って、引数が二つあってそれをどう渡せばいいのかよく分かりません。 素人なので分かりずらくて申し訳ありません。

  • cvSaveImageで画像を保存する際のフォルダ指定

    現在C++,OpenCVを用いてプログラム内で生成した画像をフォルダを指定して1フォルダ内に100枚程度の画像をどんどん保存していくというプログラムを作成しています。 そこで、フォルダを指定してcvSaveImageで画像を保存しようとすると、エラーが出てしまい保存する前にプログラムがダウンしてしまいます。 具体的には以下のとおりです。 変数 char filename[]; //出力画像の名前 char path[] = "testdir";//相対パス名(フォルダ指定用) IplImage* testimage; //生成した画像 成功例(フォルダ指定なし) sprintf(file,"%s\\test.bmp",path,); cvSaveImage(file, testimage); 失敗例(フォルダ指定あり) sprintf(file,"%s\\test.bmp",path,); cvSaveImage(file, testimage); 環境は Win XP Pro 2002 sp3 Visual C++ 2008 Express Edition OpenCV1.1 です。 どなたかご教授お願いいたします。

  • OPENCVの画像処理について

    現在OPENCVを使って画像処理の勉強をしているのですが画像を読み込む際 IplImage* cvLoadImage という関数?を使って画像を読み込んでいるのですが 例えばファイルAに10枚画像が入っていたとしてその10枚をIplImage* cvLoadImageで一枚ずつ読み込むのではなくまとめて読みこむ(配列のように読みこんだ画像の順から[1]などの番号が付くような)という関数はないのでしょうか? 画像を変えるたびに「名前.jpg」を変えないといけない手間を省きたいです。

  • OpenCV1.1、OpenCV2.3の使い方

    これまでOpenCV1.1を使っていたのですが類似画像検索をするのにHOG特徴量を用いたいと思い、HOG特徴量を求める関数のあるOpenCV2.3もインストールしました。 その際、OpenCV1.1はアンインストールして、最初からプログラムを書き換えないとダメなのでしょうか?ためしに今まで書いていたプログラムにOpenCV2.3のライブラリをインクルードしてみると、それだけで100個以上のビルドエラーが発生してしまいました。CとC++の違いによるものなのでしょうか? あとPathの設定などもOpenCV1.1のときのものを残したまま、OpenCV2.3用のPathを追加しただけなのですが、大丈夫なのでしょうか? 解決方法がわかる方がいらっしゃれば、教えて下さい。よろしくお願いいたします。

  • OpenCVで画像保存を随時保存していくには

    OpenCVで画像保存を随時保存していくには 現在OpenCVでボタンを押すごとに画像を随時保存していくプログラムを作っているのですが、わからなくなってしまった次第です。 ↓は一部抜粋 int count = 0; (略) } else if (key == 'a' ){ //'a'キーが押されたらresult画像を保存 sprintf(filename,"image/result%d.jpg",count); cvSaveimage(filename,resultImage); //cvSaveImage("image/result%d.jpg", resultImage); count++; } という感じに作りました。 自分のイメージとしては、imageフォルダにresult0からaを押すごとにresult1・result2と保存していく用にしたと思ったのですが、実際にはresult.jpgしか保存されず、それに上書きしかされません。 どうすればいいか、教えていただけると幸いです。

  • OpenCV処理画像をpictureBoxへ。

    VC++にて画像処理を行っています。 OpenCVのライブラリを使って画像処理をしようと考えているのですが、 処理した画像がMFCで作成したpitureBoxに表示の仕方が分かりません。 調べていくうちに、 「IplImage形式の画像を直接ウィンドウに描画することは出来ないので、 画像をDIBセクション形式に変換してWindows固有の描画処理を行うといい。」 ということが分かり、DIBセクション形式への変換には、IPLを入手し、 「iplConvertToDIB()関数」を使うということが分かりました。 このiplConvertToDIB()関数をつかって画像表示の方法を教えてはいただけないでしょうか?サンプルのソースなどありましたらよろしくお願いいたします。

  • OpenCVについて

    OpenCVについて OpenCVをインストールしたのですが、設定もちゃんとしたと思います。 インクルードファイルには C:\Program Files\OpenCV\cv\include C:\Program Files\OpenCV\cxcore\include C:\Program Files\OpenCV\cvaux\include C:\Program Files\OpenCV\otherlibs\highgui ライブラリファイルには C:\Program Files\OpenCV\bin C:\Program Files\OpenCV\lib を入れています。 したのですが、 fatal error C1083: include ファイルを開けません。'cxcore.h': No such file or directoryというエラーが出て実行できません。 どうしたら実行できるんでしょうか?

  • OpenCVをC++2010で使おうとしてます。

    OpenCVをC++2010で使おうとしてます。しかし以下のようなエラーで上手く成功しません 1>------ ビルド開始: プロジェクト: image, 構成: Debug Win32 ------ 1> image.cpp 1>c:\users\moeru\documents\visual studio 2010\projects\image\image\image.cpp(8): fatal error C1083: include ファイルを開けません。'highgui.h': No such file or directory ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== パソコンはソニーのバイオで、windows7です。 参考文献はOpenCVプログラミングブック第2版。 インクルードファイルのディレクトリの設定は。 C:\Program Files\OpenCV\cv\include C:\Program Files\OpenCV\cvaux\include C:\Program Files\OpenCV\cxcore\include C:\Program Files\OpenCV\otherlibs\highgui ライブラリの方の設定は C:\Program Files\OpenCV\lib プロジェクト作成は win32→[win32プロジェクト]を選択しファイル名をimageにしました。 アプリケーション設定では追加のオプションの[空のプロジェクト(E)]にチェックマークをして完了しました。 次にプロジェクトの静的ライブラリの設定で、[構成プロパティ]→[リンカ]→[入力]と進み 追加の依存ファイルに ;highgui.lib;cxts.lib;cv.lib;cxcore.lib;ml.lib;cvaux.lib;cvhaartraining.lib と入力しました。 ソースコード生成で、ソリューションエクスプローラー→ソースファイルを右クリック→追加→新しい項目→visualC++→コード→C++ファイル(.cpp)を選択し、ファイル名をimageにしました。 そのまま本のあるサンプルプログラムをダウンロードし貼り付けをしてデバックしました。 以上の手順で何か間違っているところはありますか? 本にある内容をそのまま実行しましたが上手くいきません。PCやプログラミングも大変初心者でわからないこと沢山ありますが、どなたかご教授をおねがいします。

  • 画像処理について

    プログラミング初心者です。 今、画像処理のプログラムを作りたいのですが 何でやればよいか、迷っています。 処理は以下のとおりです。 写真画像(jpg)を開く /バック白、顔の画像 輪郭を抽出 その外側を(白の部分)を透明にする pngで保存 ファイル名に日時(0808281338)などをつける 指定のフォルダに保存 Cは少し書けるのですが、画像処理はやったことがありません。 またActionScript、MAXMSPはそこそこ使えます。 processingも少し。 この中でやりやすく、またほかのアプリとの連携なども考え よりよい方法がありましたらご教授いただけると幸いです。 また、よいライブラリなどございましたら、ぜひお教えください。

専門家に質問してみよう