image - 如何强制python编写3 channel png图像

标签 image python-2.7 matplotlib

我正在编写一些脚本来进行图像处理(准备用于卷积神经网络的大批量图像数据)。作为该过程的一部分,我将单个大图像平铺成许多较小的图像。单个大图像是 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)?
我创建的示例图像如下:
enter image description here

最佳答案

如果不需要是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/

相关文章:

c++ - 从图像生成轮廓

image - Python 从图像中去除所有 GPS 元数据

python - 如何使用Python从dict中提取具有特定模式的键列表?

python - Matplotlib 条形图宽度仅改变最后一个条形的宽度

python - 如何强制 Y 轴只使用整数

html - 当鼠标悬停在图像上时显示放大的图片

asp.net - 如何在 ASP.NET MVC 3 中上传图片

python - 在 python 中打开链接时发生 SSL 错误。在浏览器中运行良好

python - Odoo:如何在服务器代码中放置调试行以在/var/log/odoo 中查看

python - 为什么我的 tanh 激活函数表现如此糟糕?