如何从多个 .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 本身非常不鼓励使用它。永远不要使用它。
有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 本身非常不鼓励使用它。永远不要使用它。