Matplotlib保存时更改图像的通道

时间:2018-10-14 13:51:33

标签: image matplotlib image-processing

我正在使用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。 这是怎么回事而且原始图像看起来很无意义,因为它全是黑色的。但是,当我用imreadimsave阅读并保存时,终于可以看到一些有意义的数字。

2 个答案:

答案 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)