我是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
我应该改变哪一部分?
答案 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{:});