如何从多个 .png 图像制作单个 256*256*N(双).mat

How to make a single 256*256*N (double) .mat from multiple .png image

有100张PNG图片,size=256*256,channel=1 这是我的测试代码(测试在垫子中保存 2 张图像):

label = {sprintf('%01d.png\n', 0:100)};
img = regexp(label{:}(1:end-1), '\n', 'split');
F1=im2double(imread(img{1}));
F2=im2double(imread(img{2}));
label=cat(1,F1,F2);`
save('test.mat', 'label')

-> test.mat 是 256X256X2 double

但是,我想在垫子中保存 100 张图像。 我的想法是 F1~100 <=> 1~100.png 然后 cat(1,F1,F2...F100),最后保存。 所以我尝试在 for loop create F1~100 中使用 eval() 来相应地加载 1~100.png 像这样:

for i=1:100
    eval(["F",num2str(c),"=",im2double(imread(img_names{c}))]);
end

但这行不通。 这个问题有什么解决办法吗?

只需预先分配您的矩阵:

last=im2double(imread(img_names{c}))
F(:,:,length(img_names))=last;

然后循环填充

for i=1:100
    F(:,:,i)=im2double(imread(img_names{i}));
end

这仅适用于相同大小的图像和灰度图像。

注意:eval 是最差的 MATLAB 函数,Mathworks 本身非常不鼓励使用它。永远不要使用它。