2016-05-27 7 views
1

に画像を変換し、私は次のように画像のpixelMatrixにいくつかの操作をやろうとしている:はPILとTkinterのを使用して、他の

start = Image.open("gua.jpg") 
sta = start.load() 
i,j = start.size 
current = np.zeros((i,j,3)) 

for ix in range(i): 
    for jx in range(j): 
     current[ix,jx] = [elem*0.5 for elem in sta[ix,jx]] 

current = np.asarray(current) 
current = Image.fromarray(current, "RGB") 
out = ImageTk.PhotoImage(current) 

panel.configure(image = out) 
panel.image = out 

しかし、私はちょうど私のマトリックスに画像のpixelMatrixからの情報を渡す場合でも、 (current[ix,jx] = sta[ix,jx])、私の結果はランダムですが、何が間違っていますか?

ありがとうございました!

enter image description here

P.S:私は問題なくout = ImageTk.PhotoImage(start)を行うことができます。

+0

do 'current = np.asarray(current)' 'current'は実際にどのように見えますか?ループの中で 'print sta [ix、jx]、現在の[ix、jx]'という出力を出力します: (私はそれが本当に大きくなるだろうと知っています) –

+0

'[128. 128. 120.]' は、配列にキャストした後に得られます。 '... [[179. 179. 177.] [174. 174. 172 。] [167 167 165] ...、 [73 68 64] [84 70 67] [153 133 132] ... ' –

+0

あなたは何を期待していますか?私は何をしたいのですか? –

答えて

1

あなたは、配列のdtypenp.uint8であることを指定する必要がありますPILは、それがため"RGB"ために意味をなさないデータを取得し、アレイ上.tobytes()メソッドを使用する場合、これを指定しない場合は

current = np.zeros((i,j,3),dtype=np.uint8) 

浮動小数点数です。

はまた、高さは、配列の最初の次元が必要になりますので、fromarrayは、行ごとにデータを取ることに注意してください、あなたはfromarrayに渡す前に、単にtransposeを取ることによってこの問題を解決することができます:あなたの後

img = Image.fromarray(current.transpose(1,0,2)) 
関連する問題