简而言之,我想将ImageTk.PhotoImage对象转换为Image(PIL)对象或numpy数组。知道你可以使用numpy.asarray()将Image(PIL)对象转换为numpy数组。我给了一个numpy数组,可以在Tkinter中显示它,如:
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()
但是部分
np.asarray(imgTk)
不会像我预期的那样返回[256,256]数组。可能有一种更简单的方法可以解决这个问题(正如你所看到的,我试图打印2D numpy数组的像素值,或者&#34; image&#34;,因为我移动光标超过它)。也许我甚至可以使用ImageTk在Tkinter中显示一个numpy数组或Image(PIL)对象,但我似乎无法找到答案。任何建议赞赏。谢谢!
答案 0 :(得分:4)
从ImageTk实例获取像素数据的效率非常低,并且您无法将ImageTk实例转换回PIL图像,但您只需从原始PIL图像中获取数据,甚至可以使用您的坐标获取数据。 / p>
而不是:
val=np.asarray(imgTk)[x,y]
使用:
val=img.getpixel((x, y))