機械系エンジニアの備忘録

20代独身社会人。仕事では機械・機構の研究開発を行っているエンジニアが、自分の専門分野ではないpythonを扱って楽しむブログです。

MENU

【tkinter】【OpenCV】tkinterのウインドにOpenCVで加工した画像を表示する

tkinterOpenCV、matplotlibを使ってtkinterのウインド上にOpenCVで加工した画像を表示させる

f:id:stjun:20200215005329p:plain

OpenCVで二値化した画像をtkinterで表示

 

1. 誰に向けた記事か

pythonを勉強している人

OpenCVに興味がある初心者

tkinterを勉強している人

※初心者向けにpythonの勉強法とその手順を記事にしました。

www.stjun.com

www.stjun.com

 

 

2. はじめに

以前、OpenCVに標準で搭載されている関数を使って、簡単に画像の二値化を行いました。

www.stjun.com

もしこういった画像処理をGUI上でマウスクリックだけで実行できたらすごく面白いですよね。簡易Photoshopです。

pythonにはtkinterというGUIを作成できるライブラリがあります。

そこでまずはOpenCVtkinterが連携できるか検証してみます。

具体的には、以下に示す過去記事を参考に、OpenCVで取り込み+処理した画像をtkinterで作ったウインド上に表示してみます。

www.stjun.com

 

3. コードと実行結果と説明

#tkinterのウインドにOpenCVで加工した画像を表示する

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)



#画像をmatplotlibで表示

fig = plt.Figure()

ax = fig.add_subplot(111) 

ax.imshow(img)



#tkinterのウインド上部にグラフを表示する

canvas = FigureCanvasTkAgg(fig, master=root)

canvas.draw()

canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)



#tkinterのウインド下部にツールを追加する

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)



#画像をmatplotlibで表示

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

#tkinterのウインド上部にグラフを表示する

canvas = FigureCanvasTkAgg(fig, master=root)

canvas.draw()

canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)



#tkinterのウインド下部にツールを追加する

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を使って簡単な画像処理を行ってみたいと思います。