2016-11-15 8 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第4チャンネルをそこに強制するのですか? (最も重要なのは)3つのカラーチャンネル(RGB)のみが保存されることを確認するために何ができるのですか?

私が作成したサンプル画像は以下の通りです:

enter image description here

答えて

2

それはあなたが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

ありがとうを使用することができmatplotlibする必要がない場合。私が思いついた解決策は似ていました。 'scipy.misc.imsave(...)'は同じことをしているようです - 'scipy.misc.imsave()'と ' scipy.misc.toimage()。save() 'を実行します。私はまだmatplotlibが第4チャンネルを強制しているように見えるのは不思議です... – TravisJ

関連する問題