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



有100个PNG图像,大小=256*256,通道=1这是我的测试代码(在垫子上保存2张图像的测试(:

label = {sprintf('%01d.pngn', 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双

但是,我想在垫子上保存100个图像。我的想法是F1~100<>1~100.png,然后cat(1,F1,F2…F100(,最后保存。因此,我尝试在for循环中使用eval((创建F1~100,以相应地加载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自己强烈反对。永远不要使用它。

最新更新