ページ 1 / 1
多量の画像の読み込み
Posted: 2008年10月21日(火) 16:53
by たつみ
初めて投稿させてもらいます.
今,画像処理のプログラムを作成しています.
パターンマッチングを用いて,
入力画像が,大量のパターン画像のどれに一番似ているかを相関係数を出して選びます.
そこでわからないこととして,画像を読み取るさいに,以下のようにすると思われるのですが,
unsigned char** data = LoadImage("result.bmp", XSIZE, YSIZE);
これでは,result.bmpのようにいちいち画像の名前を入れなければなりません.
大量に画像があるため,そのようなことはしたくないのですが,何かいい方法はないでしょうか?
C言語は基礎を教科書を使って一通り勉強したぐらいで,まだまだ初心者です.
使っているものは,C言語,VisualC++.OpenCVです.
以上,よろしくお願いします.
Re:多量の画像の読み込み
Posted: 2008年10月21日(火) 17:15
by GPGA
思いつく限りで、2通りあります。
一つ目は、あるフォルダの中に、入力画像と大量パターン画像を入れておき
入力画像ファイル名はinput.bmpなど固定の名前としておきます。
アプリケーション側は、上記のフォルダを指定すると
内部にあるinput.bmpとそれ以外の画像ファイルを比較するようにします。
二つ目は、パスを記述するテキストファイルを用意し、その中に各画像ファイルのパスを記述します。
例えば、list.txtというテキストファイル内に
IN=input.bmp
PAT=pattern0.bmp
PAT=pattern1.bmp
PAT=・・・
と記述しておき、アプリケーション側に、list.txtのパスを指定すると
テキストファイルを解析して、画像を読み込み、比較をおこなうようにします。
Re:多量の画像の読み込み
Posted: 2008年10月21日(火) 17:35
by たつみ
GPGAさん,ありがとうございます.
具体的にどのようにすればいいのでしょうか.
今のプログラムは,画像2つを比較し,その相関係数を出すようにしています.
ですので,パターン画像を次々と入れ替えて読み込みたいのです.
Re:多量の画像の読み込み
Posted: 2008年10月21日(火) 17:54
by dic
WIN32API関数
FindFirstFile()
を使えばいいかと
Re:多量の画像の読み込み
Posted: 2008年10月21日(火) 18:22
by non
私なら、ファイル名の後ろに一連番号をつけますけど。
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:多量の画像の読み込み
Posted: 2008年10月21日(火) 19:39
by GPGA
>具体的にどのようにすればいいのでしょうか.
具体的に書いたつもりだったんですが、何がわからないのでしょうか?
>パターン画像を次々と入れ替えて読み込みたいのです.
というのは、以下のようなことをやりたいわけですよね?
/*!
* @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:多量の画像の読み込み
Posted: 2008年10月21日(火) 19:52
by dic
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);
のように単なる数字の羅列になるだけだから
これをひとまとめにできないか?
ということでしょうか?
Re:多量の画像の読み込み
Posted: 2008年10月22日(水) 01:41
by たつみ
みなさん,お答ありがとうございます.
dicさん
FindFirstFile()は調べたのですが,少し難しそうだったので,別の方法を取りました.
>単なる数字の羅列になるだけだから
これをひとまとめにできないか?
まったくその通りです.
GPGAさん
その方法を試してみたのですが,
リストから画像名を配列に入れる方法を調べ,行ったのですが,
エラーが起こってしまいました.(私のやり方が悪いだけだと思うのですが)
そこで,nonさんの方法を用いたところ,なんとか望みのプログラムを作ることができました.
みなさん,どうも有難うございました.