4

つまり、 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)オブジェクトを表示することもできるかもしれませんが、それに対する答えも見つからないようです。任意の提案をいただければ幸いです。ありがとう!

4

1 に答える 1

4

ImageTk インスタンスからピクセル データを取得するのは非常に非効率的であり、ImageTk インスタンスを PIL イメージに変換することはできませんが、元の PIL イメージまたは座標を持つ配列からデータを取得することはできます。

それ以外の:

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

使用する:

val=img.getpixel((x, y))
于 2012-04-21T02:28:09.690 に答える