0

我想使用 matlab for 循环将 .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 回答