我正在编写一些脚本来进行图像处理(准备用于卷积神经网络的大批量图像数据)。作为该过程的一部分,我将单个大图像平铺成许多较小的图像。单个大图像是 3 channel (RGB) .png 图像。但是,当我使用 matplotlib.image.imsave
时为了保存图像,它变成了 4 channel 。代码的最小工作示例如下(注意python 2.7)。
#!/usr/bin/env python
import matplotlib.image as mpimg
original_image = mpimg.imread('3-channel.png')
print original_image.shape
mpimg.imsave('new.png', original_image)
unchanged_original_image = mpimg.imread('new.png')
print unchanged_original_image.shape
其输出为:(300, 200, 3)
(300, 200, 4)
我的问题是:为什么
matplotlib.image.imsave
强制第四个 channel 在那里?和(最重要的)我能做些什么来确保只保存 3 个颜色 channel (RGB)?我创建的示例图像如下:
最佳答案
如果不需要是matplotlib
你可以用 scipy.misc.toimage()
import matplotlib.image as mpimg
import scipy.misc
original_image = mpimg.imread("Bc11g.png")
print original_image.shape
# prints (200L, 300L, 3L)
mpimg.imsave('Bc11g_new.png', original_image)
unchanged_original_image = mpimg.imread('Bc11g_new.png')
print unchanged_original_image.shape
# prints (200L, 300L, 4L)
#now use scipy.misc
scipy.misc.toimage(original_image).save('Bc11g_new2.png')
unchanged_original_image2 = mpimg.imread('Bc11g_new2.png')
print unchanged_original_image2.shape
# prints (200L, 300L, 3L)
请注意,scipy.misc.toimage 自 v1.0.0 起已弃用,并将在 1.2.0 https://docs.scipy.org/doc/scipy-1.2.1/reference/generated/scipy.misc.toimage.html 中删除
关于image - 如何强制python编写3 channel png图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40613330/