如何在MATLAB中使用for循环加载一系列图像文件?

时间:2017-11-09 17:25:29

标签: matlab imread

我是MATLAB的初学者。我想通过使用for循环在特定文件夹中加载200个图像文件(大小为192x192)。

图片名称为'1.png','2.png','3.png'等。

我的代码如下。

list = dir('C:/preds/*.png');
N = size(list,1);
sum_image = zeros(192,192,200);
for i = 1:N
    sum_image(:,:,i) = imread('C:/preds/i.png');
end

我应该改变哪一部分?

3 个答案:

答案 0 :(得分:1)

我可能会像下面的代码那样做: 您目前正在获取文件名列表,然后对它没有太多帮助。对列表进行迭代更安全,否则如果缺少数字则可能会出现问题。此外,这种排序可能是不必要的,这取决于你的图像编号是否为零填充,因此它们以正确的顺序出现......但是比抱歉更安全。另一个小变化是将数组初始化为N大小而不是硬编码200.这将使其更加灵活。

searchDir = 'C:\preds\';
list = dir([searchDir '*.png']);
nameList = {list.name}; %Get array of names
imNum = str2double(strrep(nameList,'.png','')); %Get image number
[~,idx] = sort(imNum); %sort it 
nameList = nameList(idx);

N = numel(nameList);
sum_image = zeros(192,192,N);
for i=1:N
    sum_image(:,:,i) = imread(fullfile(searchDir,nameList{i}));
end

答案 1 :(得分:0)

我建议将循环中的行更改为以下内容:

sum_image(:,:,i) = imread(['C:/preds/', num2str(i), '.png']);

MATLAB将字符串中的 i 视为字符,而不是变量 i 。上面的代码行逐个构建你的字符串。

答案 2 :(得分:0)

如果这不是一个家庭作业问题,这个问题的正确答案是不要把它写成for循环。使用imageDatastore:

https://www.mathworks.com/help/matlab/ref/imagedatastore.html

ds = imageDatastore('C:/preds/');
sumImageCellArray = readall(ds);
sumImage = cat(3,sumImageCellArray{:});