tkinterを利用して画像の入れ替え


コード

pythonのGUI用のパッケージであるtkinterを使って、画像を入れ替えるコードを書いてみました。
そのコードは下記となります。

flip.py
import tkinter as tk
import cv2
from PIL import Image, ImageTk

#create window
window = tk.Tk()

#read image 1
img1 = cv2.imread("cat1.jpg")
#set image size
img1 = cv2.resize(img1,(306,148))
#change color of image from bgr to rgb
img1 = cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
#convert cv2 image to pil
img_pil1 = Image.fromarray(img1)
#convert pil to photoimage
img_tk1 = ImageTk.PhotoImage(img_pil1)

#read image 2
img2 = cv2.imread("cat2.jpg")
#set image size
img2 = cv2.resize(img2,(306,148))
#change color of image from bgr to rgb
img2 = cv2.cvtColor(img2,cv2.COLOR_BGR2RGB)
#convert cv2 image to pil
img_pil2 = Image.fromarray(img2)
#convert pil to photoimage
img_tk2 = ImageTk.PhotoImage(img_pil2)

#create canvas widget
canvas = tk.Canvas(window,width=img1.shape[1],height=img1.shape[0])
#set canvas widget
canvas.pack()
#load image to canvas. first and second parameter is the position to set image. anchor parameter is for selecting part of image to be set to position. eg: nw is top right of image.
image_id = canvas.create_image(0,0,anchor="nw",image=img_tk1)

#variable for switching between two images
flip = True

#define function for switching image
def switch():
  #use global variable
  global flip
  #if true, switch to image 2
  if flip:
    canvas.itemconfigure(image_id,image=img_tk2)
    flip = False
  #if false, switch to image 1
  else:
    canvas.itemconfigure(image_id,image=img_tk1)
    flip = True

#create button widget
button = tk.Button(window,text="Change Image",command=switch)
#set button widget
button.pack()

#call event loop
window.mainloop()


使用した画像

cat1.jpg

cat2.jpg

コードの実行結果

「Change Image」ボタンをクリックする前の状態

「Change Image」ボタンをクリックしたあとの状態