初めて投稿させてもらいます.
今,画像処理のプログラムを作成しています.
パターンマッチングを用いて,
入力画像が,大量のパターン画像のどれに一番似ているかを相関係数を出して選びます.
そこでわからないこととして,画像を読み取るさいに,以下のようにすると思われるのですが,
unsigned char** data = LoadImage("result.bmp", XSIZE, YSIZE);
これでは,result.bmpのようにいちいち画像の名前を入れなければなりません.
大量に画像があるため,そのようなことはしたくないのですが,何かいい方法はないでしょうか?
C言語は基礎を教科書を使って一通り勉強したぐらいで,まだまだ初心者です.
使っているものは,C言語,VisualC++.OpenCVです.
以上,よろしくお願いします.
多量の画像の読み込み
Re:多量の画像の読み込み
思いつく限りで、2通りあります。
一つ目は、あるフォルダの中に、入力画像と大量パターン画像を入れておき
入力画像ファイル名はinput.bmpなど固定の名前としておきます。
アプリケーション側は、上記のフォルダを指定すると
内部にあるinput.bmpとそれ以外の画像ファイルを比較するようにします。
二つ目は、パスを記述するテキストファイルを用意し、その中に各画像ファイルのパスを記述します。
例えば、list.txtというテキストファイル内に
と記述しておき、アプリケーション側に、list.txtのパスを指定すると
テキストファイルを解析して、画像を読み込み、比較をおこなうようにします。
一つ目は、あるフォルダの中に、入力画像と大量パターン画像を入れておき
入力画像ファイル名はinput.bmpなど固定の名前としておきます。
アプリケーション側は、上記のフォルダを指定すると
内部にあるinput.bmpとそれ以外の画像ファイルを比較するようにします。
二つ目は、パスを記述するテキストファイルを用意し、その中に各画像ファイルのパスを記述します。
例えば、list.txtというテキストファイル内に
IN=input.bmp PAT=pattern0.bmp PAT=pattern1.bmp PAT=・・・
と記述しておき、アプリケーション側に、list.txtのパスを指定すると
テキストファイルを解析して、画像を読み込み、比較をおこなうようにします。
Re:多量の画像の読み込み
GPGAさん,ありがとうございます.
具体的にどのようにすればいいのでしょうか.
今のプログラムは,画像2つを比較し,その相関係数を出すようにしています.
ですので,パターン画像を次々と入れ替えて読み込みたいのです.
具体的にどのようにすればいいのでしょうか.
今のプログラムは,画像2つを比較し,その相関係数を出すようにしています.
ですので,パターン画像を次々と入れ替えて読み込みたいのです.
Re:多量の画像の読み込み
私なら、ファイル名の後ろに一連番号をつけますけど。
VisualC++は使ったことがないので、Cですけど。
VisualC++は使ったことがないので、Cですけど。
#include<stdio.h> #include <string.h> int main(void) { char str[100]; int i; for(i=0;i<10;i++){ sprintf(str,"pattern%d.bmp",i); puts(str); //LoadImageの代わりね } return 0; }
Re:多量の画像の読み込み
>具体的にどのようにすればいいのでしょうか.
具体的に書いたつもりだったんですが、何がわからないのでしょうか?
>パターン画像を次々と入れ替えて読み込みたいのです.
というのは、以下のようなことをやりたいわけですよね?
それで、main関数内部で定義しているinFile変数とpatFile配列変数の中身を
いちいち入力するのではなく、一括で取得したいとのことなので
No:22771の案を出したわけです。
具体的に書いたつもりだったんですが、何がわからないのでしょうか?
>パターン画像を次々と入れ替えて読み込みたいのです.
というのは、以下のようなことをやりたいわけですよね?
/*! * @brief 相関係数を求める関数 * * @param inFile 入力ファイルのパス * @param patFile パターンファイルのパス * * @return 相関係数を返す。 */ double CorrelationCoefficient(const char* inFile, const char* patFile); int main() { cosnt char* inFile = "input.bmp"; // 入力ファイル const char* patFile[3] = { // 大量のパターンファイル "pattern0.bmp", "pattern1.bmp", "pattern2.bmp", } int i; // パターン画像を次々と入れ替えて読み込む for (i = 0; i < 3; ++i) { CorrelationCoefficient(inFile, patFile); } }
それで、main関数内部で定義しているinFile変数とpatFile配列変数の中身を
いちいち入力するのではなく、一括で取得したいとのことなので
No:22771の案を出したわけです。
Re:多量の画像の読み込み
unsigned char** data = LoadImage("result1.bmp", XSIZE, YSIZE);
unsigned char** data = LoadImage("result2.bmp", XSIZE, YSIZE);
unsigned char** data = LoadImage("result3.bmp", XSIZE, YSIZE);
unsigned char** data = LoadImage("result4.bmp", XSIZE, YSIZE);
unsigned char** data = LoadImage("result5.bmp", XSIZE, YSIZE);
unsigned char** data = LoadImage("result6.bmp", XSIZE, YSIZE);
unsigned char** data = LoadImage("result7.bmp", XSIZE, YSIZE);
unsigned char** data = LoadImage("result8.bmp", XSIZE, YSIZE);
unsigned char** data = LoadImage("result9.bmp", XSIZE, YSIZE);
unsigned char** data = LoadImage("result10.bmp", XSIZE, YSIZE);
のように単なる数字の羅列になるだけだから
これをひとまとめにできないか?
ということでしょうか?
unsigned char** data = LoadImage("result2.bmp", XSIZE, YSIZE);
unsigned char** data = LoadImage("result3.bmp", XSIZE, YSIZE);
unsigned char** data = LoadImage("result4.bmp", XSIZE, YSIZE);
unsigned char** data = LoadImage("result5.bmp", XSIZE, YSIZE);
unsigned char** data = LoadImage("result6.bmp", XSIZE, YSIZE);
unsigned char** data = LoadImage("result7.bmp", XSIZE, YSIZE);
unsigned char** data = LoadImage("result8.bmp", XSIZE, YSIZE);
unsigned char** data = LoadImage("result9.bmp", XSIZE, YSIZE);
unsigned char** data = LoadImage("result10.bmp", XSIZE, YSIZE);
のように単なる数字の羅列になるだけだから
これをひとまとめにできないか?
ということでしょうか?
Re:多量の画像の読み込み
みなさん,お答ありがとうございます.
dicさん
FindFirstFile()は調べたのですが,少し難しそうだったので,別の方法を取りました.
>単なる数字の羅列になるだけだから
これをひとまとめにできないか?
まったくその通りです.
GPGAさん
その方法を試してみたのですが,
リストから画像名を配列に入れる方法を調べ,行ったのですが,
エラーが起こってしまいました.(私のやり方が悪いだけだと思うのですが)
そこで,nonさんの方法を用いたところ,なんとか望みのプログラムを作ることができました.
みなさん,どうも有難うございました.
dicさん
FindFirstFile()は調べたのですが,少し難しそうだったので,別の方法を取りました.
>単なる数字の羅列になるだけだから
これをひとまとめにできないか?
まったくその通りです.
GPGAさん
その方法を試してみたのですが,
リストから画像名を配列に入れる方法を調べ,行ったのですが,
エラーが起こってしまいました.(私のやり方が悪いだけだと思うのですが)
そこで,nonさんの方法を用いたところ,なんとか望みのプログラムを作ることができました.
みなさん,どうも有難うございました.