2017-06-26 8 views
1

私は小さなプロジェクトがあるので、一週間前にPythonでいくつかのテストを始めました。私は、RGB画像の3つのチャンネルを表示する必要がありますが、pyplot.imshow()機能は、次の項目が表示されますpyplotで画像の赤、緑、青(rgb)チャンネルを正しく表示するには

Current display

私は赤、緑、青のチャンネルを表示したい、このように:

Red channel from RGB

これはこれまでのところ、私のコードです:

from matplotlib import pyplot as plt 
from PIL import Image 
import numpy as np 

img1 = np.array(Image.open('img1.png')) 
figure, plots = plt.subplots(ncols=3, nrows=1) 
for i, subplot in zip(range(3), plots): 
    temp = np.zeros(img1.shape, dtype='uint8') 
    temp = img1[:,:,i] 
    subplot.imshow(temp) 
    subplot.set_axis_off() 
plt.show() 

私は任意のノートブックでは動作しません。むしろ、私はPyCharmで働いています。私はこの記事を読む:24739769。私はチェックし、img1.dtypeuint8だから、私は何をしたいかを見せる方法はこれ以上ない。

+0

こんにちは@Abrahamグティエレスは、SOへようこそ。私はあなたが投稿に画像を投稿するのに十分な評判がないことを理解していますが、将来はそれをしてください。人々が外部ページに行く必要がなければ、あなたの問題を見る可能性が高くなります。 'img1.shape'、' temp.min() '、' temp.max() 'とは何ですか?また、元の画像を投稿してエラーを再現することはできますか? –

+0

すみません。私は画像ボタンを使用しましたが、エディタはそれらをリンクとして表示します。 img1.shapeは、私が知っている限り(x、y、rgbチャンネル)、ロードされた画像の大きさです。 min()とmax()関数は、配列/行列の最小値と最小値をそれぞれ返します。 –

答えて

1

わずか1つの変更が必要です:temp[:,:,i] = img1[:,:,i]

あなたが示された最初の画像を使用して、完全かつ検証例:

from matplotlib import pyplot as plt 
from PIL import Image 
import numpy as np 

img1 = np.array(Image.open('img1.png')) 
figure, plots = plt.subplots(ncols=3, nrows=1) 
for i, subplot in zip(range(3), plots): 
    temp = np.zeros(img1.shape, dtype='uint8') 
    temp[:,:,i] = img1[:,:,i] 
    subplot.imshow(temp) 
    subplot.set_axis_off() 
plt.show() 

enter image description here

+0

ありがとうございます。私はあなたが追加したラインを逃した。また、 'img1.shape'は'(x、y、3) 'の代わりに'(x、y、4) 'を返します(RGBAの場合のみ)。 –

関連する問題