OpenCVとPythonを使用してGUIを作成する方法について説明します。この記事では、TkinterとPySimpleGUIの2つの異なるライブラリを使用して、OpenCVの画像を表示するGUIを作成します。
Tkinterを使用した方法
TkinterはPythonの標準ライブラリで、GUIを作成するために使用されます。以下に、Tkinterを使用してウィンドウを作成し、その中のCanvasにOpenCVの画像を表示させる方法を示します。
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)
image_pil = Image.fromarray(image_rgb)
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()
PySimpleGUIを使用した方法
PySimpleGUIは、PythonでGUIを簡単に作成するためのライブラリです。以下に、PySimpleGUIを使用してOpenCVの画像を表示する方法を示します。
import cv2
import numpy as np
import PySimpleGUI as sg
sg.theme('LightBlue')
layout = [
[sg.Text('Realtime movie', size=(40, 1), justification='center', font='Helvetica 20',key='-status-')],
[sg.Text('Camera number: ', size=(8, 1)), sg.InputText(default_text='0', size=(4, 1),key='-camera_num-')],
[sg.Image(filename='', key='image')],
[sg.Button('Start', size=(10, 1), font='Helvetica 14',key ='-start-'), sg.Button('Stop', size=(10, 1), font='Helvetica 14',key = '-stop-'), sg.Button('Exit', size=(10, 1), font='Helvetica 14', key='-exit-'), ]
]
window = sg.Window('Realtime movie',layout, location=(100, 100))
recording = False
while True:
event, values = window.read(timeout=20)
if event in (None, '-exit-'):
break
elif event == '-start-':
window['-status-'].update('Live')
camera_number = int(values['-camera_num-'])
cap = cv2.VideoCapture(camera_number, cv2.CAP_DSHOW)
recording = True
elif event == '-stop-':
window['-status-'].update("Stop")
recording = False
if recording:
ret, frame = cap.read()
if ret is True:
imgbytes = cv2.imencode('.png', frame)[1].tobytes()
window['image'].update(data=imgbytes)
window.close()
これらのコードは、OpenCVで取得した画像をGUIで表示する基本的な方法を示しています。これらのコードを基に、自分のニーズに合わせてカスタマイズすることができます。例えば、ボタンを追加して画像処理のパラメータを調整したり、スライダーを使用して画像の明るさを調整したりすることができます。.