OpenCV で取り扱う画像は cv2.imshow() で表示させるのが最も簡単ですが、ボタンなどの GUI 部品を一緒に表示させることはできません。
GUI 部品を一緒に表示させるには Qt や Tinker のウィンドウを使う必要があります。
ここでは Tkinter でウィンドウを作成し、その中の Canvas に OpenCV の画像を表示させる方法を紹介します。
環境
- Python 3.7.0
- opencv-python 3.4.3.18
- Pillow 5.2.0
※ ソースコードと同じ場所に lenna.jpg が置かれているものとします。
import tkinter
import cv2
from PIL import Image, ImageTk
root = tkinter.Tk()
root.title("Show Image from OpenCV in Tkinter canvas")
image_bgr = cv2.imread("lenna.jpg")
image_rgb = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2RGB) # imreadはBGRなのでRGBに変換
image_pil = Image.fromarray(image_rgb) # RGBからPILフォーマットへ変換
image_tk = ImageTk.PhotoImage(image_pil) # ImageTkフォーマットへ変換
canvas = tkinter.Canvas(root, width=image_bgr.shape[0], height=image_bgr.shape[1]) # Canvas作成
canvas.pack()
canvas.create_image(0, 0, image=image_tk, anchor='nw') # ImageTk 画像配置
root.mainloop()