Tkinter图像显示(带[转换] NumPy数组)

时间:2012-04-21 00:00:22

标签: python tkinter python-imaging-library

简而言之,我想将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)对象,但我似乎无法找到答案。任何建议赞赏。谢谢!

1 个答案:

答案 0 :(得分:4)

从ImageTk实例获取像素数据的效率非常低,并且您无法将ImageTk实例转换回PIL图像,但您只需从原始PIL图像中获取数据,甚至可以使用您的坐标获取数据。 / p>

而不是:

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

使用:

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