我知道之前已经问过这个问题。但是,我找不到明确的答案。我有一个非常高分辨率彩色图像的数据,大小为50,000乘60,000,数据类型为unit8。我无法使用imwrite保存整个图像。我收到的错误是:
“图片必须包含少于2 ^ 32 - 1个字节的数据”
有没有办法在MATLAB中保存整个图像? 现在,我必须将数据分成更小的部分(子图像),然后使用imwrite将每个部分写入png文件。该文件的输出格式并不重要。
答案 0 :(得分:0)
您的图像占用8 * 50000 * 60000 * 3 = 7.2000e + 10个字节的数据,是MATLAB图像大小限制的16.7638倍。为什么不将它分成20块,保存它们然后手动合并?如果将图像分割为6个8x50000x3000x3,它们都将符合2 ^ 32的限制。
我确信OP有足够的资格做到这一点,但无论如何我都会解释这个程序。将图像转换为50000x60000x3阵列并执行以下操作:
x = 0:3000:60000;
for i = 1:length(x)-1
imwrite(A(:,x(i)+1:x(i+1),:),strcat('image',num2str(i),'.png'),'png');
end
这将为您创建20个图像,名称为“image1.png”,“image2.png”等。然后,您可以使用this first google search result手动合并这些图像。或许,有一些更好的方法可以做到这一点,但我认为这是最简单的方法。
答案 1 :(得分:0)
Another question有一个对我有用的答案:如果您的图片存储为双矩阵,请使用im2uint8(img)
转换为uint8,然后保存。