import tkinter as tk
import cv2
from PIL import Image, ImageOps, ImageTk
def show_image():
global disp
img = cv2.imread("img.png")
pil = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
pil = ImageOps.pad(pil, (canvas.winfo_width(), canvas.winfo_height()))
disp = ImageTk.PhotoImage(pil)
canvas.create_image(0, 0, image=disp, anchor=tk.NW) # dispの生存期間に注意
tkroot = tk.Tk()
button = tk.Button(tkroot, text="画像を表示", command=show_image)
button.pack()
canvas = tk.Canvas(tkroot)
canvas.pack(fill=tk.BOTH, expand=True)
tkroot.mainloop()