【问题标题】:Tkinter image display (with [converted] NumPy array)Tkinter 图像显示(带有 [converted] NumPy 数组)
【发布时间】:2012-04-21 00:00:21
【问题描述】:

简而言之,我想将 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 数组或“图像”的像素值)。也许我什至可以使用 ImageTk 在 Tkinter 中显示一个 numpy 数组或 Image (PIL) 对象,但我似乎也找不到答案。任何建议表示赞赏。谢谢!

【问题讨论】:

  • 你知道如何反其道而行之吗?如如何将 numpy 数组图像更改为 Tk 图像以便我可以使用 Tkinter 显示它?

标签: python tkinter python-imaging-library


【解决方案1】:

从 ImageTk 实例中获取像素数据效率非常低,您无法将 ImageTk 实例转换回 PIL Image,但您可以简单地从原始 PIL Image 甚至带有坐标的数组中获取数据。

代替:

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

用途:

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

【讨论】:

  • 有效。你太客气了,先生/女士。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 2015-01-11
相关资源
最近更新 更多