1

Imagesというフォルダ内にBasePicsというフォルダがあります。BasePics の中には 30 枚の JPEG 画像があります。次のことが可能かどうか疑問に思っています: imread() コマンドを使用して、これらすべての画像を読み取るスクリプトを作成できますか。画像の名前は多少連続しています: C1A_Base.jpg、C1B_Base.jpg、C1C_Base.jpg、C2A_Base.jpg、C2B_Base.jpg、C2C_Base.jpg など.... C10C_Base.jpg までずっと

何らかの形でループを使用できますか:

    file = dir('Images\BasePics');
    NF = length(file);
    for k = 1:NF
        images(k) = imread(fullfile('ImagesBasePics',file(k))
        imagesc(images(k))
    end

これは私がやりたいことの大まかな考えですが、Imagesフォルダーにある現在の命名形式で実行できるかどうか疑問に思っています。また、読み取られる各画像を、現在フォルダー Images\BasePics で名前が付けられているのと同じまたは類似の名前を持つ独自の変数にしたいと考えていますimages。などの名前で、30個の個別の変数が必要A1, A2,A3,B1,B2,B3です...

また、私がちょうど尋ねるとき:

    dir images\BasePics

Matlab は、30 個ではなく 33 個のファイルを出力します。フォルダーの先頭に 2 つの余分なファイルがあります。'..' と最後に 1 つ: 'Thumbs.db' フォルダーを個別に見ると、これらは存在しません。プログラムで Matlab にこれらをスキップさせる方法はありますか?

ありがとう!!

4

2 に答える 2

2

ファイルの名前は事前にわかっているので、 をスキップしてdir先に進み、ファイルを読み取ることができます。

for l = 'ABC'
    for n=1:10
        nm = sprintf('C%d%c_Base.jpg', n, l );
        fnm = sprintf('%c%d', l, n );
        imgs.(fnm) = imread( fullfile('images','BasePics', nm ) );
    end
end

これで、各画像のフィールドを持つ構造体 ができました。imgsA1C10

于 2013-08-05T21:37:37.767 に答える
1

あなたはとても近くにいます。dir('Images\BasePics\*.jpg')余分なファイルを取り除くために使用します。

必要な命名システムは、追加のバッチ処理には適していません (本当に A1、A2 などをすべて入力しますか?)。私はそれを順番に保ち、一致するファイル名のリストを保存するか、images.C1A などの構造体配列を使用します。

dirlist = dir('Images\BasePics\*.jpg');

for k = 1:length(dirlist);
    fname = dirlist(k).name;
    [path,name,ext] = fileparts(fname); % separate out base name of file
    images.(name) = imread(fullfile('Images\BasePics', fname));
end
于 2013-08-05T21:38:05.843 に答える