多量の画像の読み込み

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
たつみ

多量の画像の読み込み

#1

投稿記事 by たつみ » 16年前

初めて投稿させてもらいます.
今,画像処理のプログラムを作成しています.
パターンマッチングを用いて,
入力画像が,大量のパターン画像のどれに一番似ているかを相関係数を出して選びます.
そこでわからないこととして,画像を読み取るさいに,以下のようにすると思われるのですが,

unsigned char** data = LoadImage("result.bmp", XSIZE, YSIZE);

これでは,result.bmpのようにいちいち画像の名前を入れなければなりません.
大量に画像があるため,そのようなことはしたくないのですが,何かいい方法はないでしょうか?
C言語は基礎を教科書を使って一通り勉強したぐらいで,まだまだ初心者です.
使っているものは,C言語,VisualC++.OpenCVです.
以上,よろしくお願いします.

GPGA

Re:多量の画像の読み込み

#2

投稿記事 by GPGA » 16年前

思いつく限りで、2通りあります。

一つ目は、あるフォルダの中に、入力画像と大量パターン画像を入れておき
入力画像ファイル名はinput.bmpなど固定の名前としておきます。
アプリケーション側は、上記のフォルダを指定すると
内部にあるinput.bmpとそれ以外の画像ファイルを比較するようにします。

二つ目は、パスを記述するテキストファイルを用意し、その中に各画像ファイルのパスを記述します。
例えば、list.txtというテキストファイル内に
IN=input.bmp
PAT=pattern0.bmp
PAT=pattern1.bmp
PAT=・・・
 

と記述しておき、アプリケーション側に、list.txtのパスを指定すると
テキストファイルを解析して、画像を読み込み、比較をおこなうようにします。

たつみ

Re:多量の画像の読み込み

#3

投稿記事 by たつみ » 16年前

GPGAさん,ありがとうございます.
具体的にどのようにすればいいのでしょうか.
今のプログラムは,画像2つを比較し,その相関係数を出すようにしています.
ですので,パターン画像を次々と入れ替えて読み込みたいのです.

dic

Re:多量の画像の読み込み

#4

投稿記事 by dic » 16年前

WIN32API関数
FindFirstFile()
を使えばいいかと

non

Re:多量の画像の読み込み

#5

投稿記事 by non » 16年前

私なら、ファイル名の後ろに一連番号をつけますけど。
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;
}

GPGA

Re:多量の画像の読み込み

#6

投稿記事 by GPGA » 16年前

>具体的にどのようにすればいいのでしょうか.
具体的に書いたつもりだったんですが、何がわからないのでしょうか?

>パターン画像を次々と入れ替えて読み込みたいのです.
というのは、以下のようなことをやりたいわけですよね?
/*!
 * @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の案を出したわけです。

dic

Re:多量の画像の読み込み

#7

投稿記事 by dic » 16年前

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:多量の画像の読み込み

#8

投稿記事 by たつみ » 16年前

みなさん,お答ありがとうございます.

dicさん
FindFirstFile()は調べたのですが,少し難しそうだったので,別の方法を取りました.

>単なる数字の羅列になるだけだから
これをひとまとめにできないか?
まったくその通りです.

GPGAさん
その方法を試してみたのですが,
リストから画像名を配列に入れる方法を調べ,行ったのですが,
エラーが起こってしまいました.(私のやり方が悪いだけだと思うのですが)

そこで,nonさんの方法を用いたところ,なんとか望みのプログラムを作ることができました.

みなさん,どうも有難うございました.

閉鎖

“C言語何でも質問掲示板” へ戻る