我正在使用matplotlib读取图像,但是用imsave
保存原始图像后通道数发生了变化。这是代码:
import matplotlib.image as mpimg
img = mpimg.imread('sample.tiff')
print(img.shape)
mpimg.imsave('sample2.tiff', img)
img2 = mpimg.imread('sample2.tiff')
print(img2.shape)
这是输出:
(2160, 2160)
(2160, 2160, 4)
图像原来是1通道,但变成了4通道图像。最终频道似乎总是255。
这是怎么回事而且原始图像看起来很无意义,因为它全是黑色的。但是,当我用imread
和imsave
阅读并保存时,终于可以看到一些有意义的数字。
答案 0 :(得分:2)
输入图像sample.tiff
是一个单通道灰度图像。人们不知道为什么会这样,它仅取决于您从哪里获得该图像。
imread
将此图像转换为2D numpy数组。
当给定2D numpy数组作为输入imsave
时,会将色彩映射表应用于该数组,并且在未给出其他自变量的情况下,在最小和最大数据值之间应用归一化。因此,所得图像是具有4个通道的彩色图像。
imread
然后将该图像转换为3D numpy数组。
答案 1 :(得分:1)
您似乎不是第一个遇到此问题的人-see here。
我的建议是使用imageio
(或PIL)保存图像(实际上也可以读取图像),并且效果很好:
import imageio
import matplotlib.image as mpimg
img = mpimg.imread('a.tif')
imageio.imwrite('result.tif',img)