2012-04-21 5 views
4

요약하면 ImageTk.PhotoImage 객체를 Image (PIL) 객체 또는 numpy 배열로 변환하고 싶습니다. numpy.asarray()를 사용하여 Image (PIL) 객체를 numpy 배열로 변환 할 수 있다는 것을 알았습니다. 나는 NumPy와 배열을 제공하고있어 같은 Tkinter의에 표시 할 수 있습니다 내가 예상처럼 Tkinter 이미지 디스플레이 (NumPy 배열로 변환 됨)

np.asarray(imgTk) 

가 [256256] 배열을 반환하지 않습니다

from Tkinter import * 
import numpy as np 
import Image, ImageTk 

def callback(event): 
     # do some stuff with a numpy array 
     # ideally, e.g.: 
     x=event.x; y=event.y 
     val=np.asarray(imgTk)[x,y] 
     print val 

arr=np.ones([256,256]) 
img=Image.fromarray(arr) 
imgTk=ImageTk.PhotoImage(img) 

t=Tk() 
l=Label(t) 
l.configure(image=imgTk) 
l.bind('<Motion>', callback) 

l.pack() 
t.mainloop() 

그러나 일부입니다. 더 쉬운 방법이있을 것입니다. (볼 수 있듯이 커서를 움직이면 2D numpy 배열 또는 "이미지"의 픽셀 값을 출력하려고합니다.) 어쩌면 ImageTk를 사용하지 않고 Tkinter에 numpy 배열 또는 Image (PIL) 객체를 표시 할 수도 있지만 그 중 하나에 대한 답을 찾지 못하는 것 같습니다. 어떤 제안도 감사합니다. 감사!

+0

그리고 당신은 반대를 어떻게 알 수 있습니까? Tkinter를 사용하여 numpy 배열 이미지를 Tk Image로 변경하는 방법은 무엇입니까? –

답변

4

ImageTk 인스턴스에서 픽셀 데이터를 가져 오는 것은 매우 비효율적이며 ImageTk 인스턴스를 PIL 이미지로 다시 변환 할 수는 없지만 단순히 원래 PIL 이미지 또는 좌표로 배열을 가져올 수 있습니다.

val=np.asarray(imgTk)[x,y] 

사용 :

대신

val=img.getpixel((x, y)) 
+0

작동. 당신은 너무 친절합니다, 선생님/부인. 감사! – Ryan

관련 문제