0

matlab for loop を使用して、.bmp イメージを行ベクトルにロードしたいと考えています。ループとファイル名は、シーケンスに従ってループしていません。以下は私のコードとファイル名の例です。私は問題を理解しようとしていましたが、ファイル番号がループを開始して 1 から読み取られ、次に 10,11,12,13,14,15 から 19 までまっすぐになり、その後 2 からのみループし、次に 21 になることがわかりました。 ,22,23,24、29 まで、その後 3 のみ、その後 31.... ファイル名は先頭の番号のみを読み取ります。この問題を解決する方法を教えてください。img1、img2、img3、img4、img5、img6、img7、img8、img9、img10、img11からファイルをループしたい

%file names : (30 image files)
%img1.bmp - img30.bmp

%Matlab codes start here :
train_img_num = numel(train_files);
train_img = [];
for i=1:1:train_img_num
     number = num2str(i);
    filename = fullfile(userFolder2, train_files(i).name);
    img = reshape((mat2gray(im2double(imread(filename))))',1,180000);
    train_img(i,:) = img(:);
    clear img;
end
4

1 に答える 1

0

@OlegKomarov はおそらく正しいようです。構造体配列train_files'name'フィールドに従ってソートされていません。sort次のようにループする前にそれを行うことができます:

[~,idx] = sort({train_files.name});
train_files = train_files(idx);

またはおそらく

[~,idx] = sort([train_files.name]);
train_files = train_files(idx);

The Mathworks からのこのブログ投稿には、他のオプションがあります。

別のオプションは、構造体を使用せず、次を使用してファイル名を直接書き込むことですsprintf

filename = fullfile(userFolder2, sprintf('img%d.bmp',i));
于 2013-08-17T19:15:12.410 に答える