我想使用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
答案 0 :(得分:0)
似乎@OlegKomarov可能是正确的:你的struct array train_files
没有根据'name'
字段排序。在循环之前你可以sort
:
[~,idx] = sort({train_files.name});
train_files = train_files(idx);
或可能
[~,idx] = sort([train_files.name]);
train_files = train_files(idx);
此blog post from The Mathworks还有其他选择。
另一个选择是不使用结构并使用sprintf
直接写文件名:
filename = fullfile(userFolder2, sprintf('img%d.bmp',i));