1. 誰に向けた記事か
・pythonを勉強している人
・OpenCVに興味がある初心者
・tkinterを勉強している人
※初心者向けにpythonの勉強法とその手順を記事にしました。
www.stjun.com
www.stjun.com
2. はじめに
以前、OpenCVに標準で搭載されている関数を使って、簡単に画像の二値化を行いました。
www.stjun.com
もしこういった画像処理をGUI上でマウスクリックだけで実行できたらすごく面白いですよね。簡易Photoshopです。
pythonにはtkinterというGUIを作成できるライブラリがあります。
そこでまずはOpenCVとtkinterが連携できるか検証してみます。
具体的には、以下に示す過去記事を参考に、OpenCVで取り込み+処理した画像をtkinterで作ったウインド上に表示してみます。
www.stjun.com
3. コードと実行結果と説明
import tkinter as tk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import (
FigureCanvasTkAgg, NavigationToolbar2Tk)
import cv2
root=tk.Tk()
root.title('OpenCV')
img = cv2.imread('./test.jpg',0)
ret1,img=cv2.threshold(img,130,255,cv2.THRESH_BINARY)
fig = plt.Figure()
ax = fig.add_subplot(111)
ax.imshow(img)
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
toolbar = NavigationToolbar2Tk(canvas, root)
toolbar.update()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
root.mainloop()
以上を実行すると冒頭の画像のように、tkinterのウインドにOpenCVで取り込んだ画像を表示できす。
3.1 説明
img = cv2.imread('./test.jpg',0)
ret1,img=cv2.threshold(img,130,255,cv2.THRESH_BINARY)
fig = plt.Figure()
ax = fig.add_subplot(111)
ax.imshow(img)
これまで同様にOpenCVの関数であるimread()で画像を読み込み、threshold()で画像を二値化します。
そして、plt.Figure()とfig.add_subplot()でグラフを準備し、OpenCVで取り込んだ画像をmatplotlibの関数であるimshow()を用いて表示します。
あとはcanvasを使ってtkinterのウインドに表示するだけです。
下はお決まりのコードです。呪文だと思ってください。コピペです。
詳細は過去記事をご覧ください。
stjun.hatenablog.com
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
toolbar = NavigationToolbar2Tk(canvas, root)
toolbar.update()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
root.mainloop()
おすすめ参考書
tkinterは参考書が非常に少ないです、というより日本語の参考書はほぼ皆無です。個人的には以下がお勧めです。
Amazonの月額読み放題サービス「Kindle unlimited」でも読めます。初回30日無料で解約も数クリックだけで簡単です。
4. 最後に
次回もOpenCVを使って簡単な画像処理を行ってみたいと思います。