Matlab,用于加载图像文件的循环编号问题

时间:2013-08-17 17:17:17

标签: matlab for-loop

我想使用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

1 个答案:

答案 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));