2016-11-15 72 views
3

我正在編寫一些腳本來完成圖像處理(準備用於卷積神經網絡的大批量圖像數據)。作爲該過程的一部分,我將一張大圖像拼貼成許多較小的圖像。單個大圖像是3通道(RGB).png圖像。但是,當我使用matplotlib.image.imsave保存圖像時,它變爲4通道。代碼的最小工作示例如下(注意python 2.7)。如何強制python寫入3通道png圖像

#!/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強迫第四頻道在那裏?和(最重要的是)我能做些什麼來確保只保存3個顏色通道(RGB)?

我創建的示例圖像低於:

enter image description here

回答

2

如果它不需要是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) 
+0

謝謝。我提出的解決方法是相似的,'scipy.misc.imsave(...)'似乎也做同樣的事情 - 我將研究'scipy.misc.imsave()'和' scipy.misc.toimage()。保存()'。我仍然好奇爲什麼matplotlib似乎強制第四頻道... – TravisJ