【问题标题】:Matlab, for loop numbering issue to load images filesMatlab,用于加载图像文件的循环编号问题
【发布时间】:2013-08-18 03:15:12
【问题描述】:

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

【问题讨论】:

  • 循环遵循{train_files.name} 中的顺序。此外,如果您的文件名称为 file1、...、file10、...file20 等...则顺序尊重字典排序。将文件重命名为 file01、file02 等...
  • 请问如何解决这个问题,根据整数而不是前面的数字加载文件?

标签: matlab for-loop


【解决方案1】:

似乎@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);

blog post from The Mathworks 有其他选项。

另一种选择是不使用结构体,直接使用sprintf写入文件名:

filename = fullfile(userFolder2, sprintf('img%d.bmp',i));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2014-03-12
    • 2021-02-28
    • 2013-05-04
    • 2012-08-21
    相关资源
    最近更新 更多