今回の簡単な流れ
- tkinterでウィンドウを用意
- canvasを作成
- canvas上にtkinter用にコンバートした画像を表示
プログラム例
今回の例ではcv2で画像を読み込んでいます.
PILのfromarrayとPhotoImageを使って,
numpy.ndarray → PIL.Image.Image → PIL.ImageTk.PhotoImage
と変換しています.
グレースケールで読み込んでいますが,カラーの場合も同様です.
※関数内でコンバートした場合(下記プログラムのimg_tk),ガベージコレクションに入れられるので,リストに追加することで回避しています.
import tkinter as tk
from PIL import Image, ImageTk
import cv2
def convert(img_gry):
img_pil = Image.fromarray(img_gry)
img_tk = ImageTk.PhotoImage(img_pil)
imgs.append(img_tk)
return img_tk
# --main--
path = "sample.png"
img_gry = cv2.imread(path, 0)
hei = img_gry.shape[0]
wid = img_gry.shape[1]
imgs = []
root = tk.Tk()
canvas = tk.Canvas(root, height=hei, width=wid)
canvas.pack()
canvas.create_image(0, 0, image=convert(img_gry), anchor='nw')
root.mainloop()