OpenCVとPySimpleGUIを使えば、簡単なGUIが作成でき、画像処理を簡単に行うことができます。OpenCVは、画像処理のためのライブラリです。またPySimpleGUIは、GUIを簡単に作成できるツールで、OpenCVを使って画像処理を行うためのインターフェースを提供します。
この2つのライブラリを使用して、実際にGUIの画像処理ソフトを作成してみましょう。
画像処理ってどうやるのかわからないし、GUIを作れないと、みんなに使ってもらえない。。。
PysimpleGUIとopenCVを使用すれば、簡単にGUIを作成し、画像処理ソフトを作成することができるよ。実際に使用してみましょう。
実際にGUIを作りたい方は多いと思いますが、非常に簡単で30分もあれば、一つ作ることができます。
【記事の対象者】
・pythonで画像処理をやってみたい。
・GUIを実際に作ってみたい人
・画像処理に興味があり、会社で使うためにGUIを作成したい人
OpenCVとPySimpleGUIを使った画像処理入門
OpenCVとPySimpleGUIを使って画像処理を行うことで、画像の色や大きさを変更したり、画像を分割したり、特定のオブジェクトを検出したりすることができます。これらのツールを使えば、画像処理を学ぶのが非常に簡単になります。
OpenCVとは
OpenCVとは、コンピュータビジョン(コンピュータが画像を理解する技術)を実現するためのオープンソースのライブラリです。OpenCVを使用すると、カメラやスキャナなどの画像入力を受け取り、物体の追跡、画像分類、特徴量抽出などを行うことができます。また、OpenCVを使えば、画像を加工したり、3Dグラフィックスを表示したり、動画を作成したりすることも可能です。
PySimpleGUIとは
PySimpleGUIは、Pythonプログラミング言語を使用してGUI(グラフィカルユーザーインターフェイス)を作成するためのライブラリです。GUIは、ユーザーがコンピューターを操作するための画面を構築するためのインターフェイスです。PySimpleGUIは、非常に簡単なコードでGUIを作成できるので、初心者にとって非常に便利なツールです。また、OpenCVと組み合わせることで、画像処理を行うことも可能です。
OpenCVとPySimpleGUIで画像処理を行うための準備
OpenCVとPySimpleGUIを使って画像処理を行うためには、まずはそれぞれのライブラリをインストールする必要があります。OpenCVはPythonのパッケージ管理ツールpipを使ってインストールします。PySimpleGUIも同様にpipコマンドからインストールできるので、やってみたください。ターミナル上で下記コマンドを実行します。
pip install opencv-python
pip install PySimpleGUI
OpenCVとPySimpleGUIを使った画像処理
では実際にこれらを使ってプログラムを作成していきます。
画像を読み込む
画像をOpenCVを使って読み込む方法を説明します。まず、OpenCVのインポートを行います。次に、cv2.imread関数を使って画像を読み込みます。引数として、読み込みたい画像のパスを指定します。最後に、imshow関数を使って画像を表示させます。以上で画像の読み込みが完了します。
# 画像を読み込む
img = cv2.imread('img/1.png') #画像のpassを指定
画像の加工
画像の加工とは、OpenCVを使って画像の色や大きさを変更することです。PySimpleGUIを使うと、画像を読み込んで加工するためのGUIを簡単に作成できます。例えば、画像の色を変更する場合、GUIで色を選択し、画像を実行すると、選択した色に変更されます。また、画像の大きさを変更する場合は、GUIで大きさを指定し、画像を実行すると、指定した大きさに変更されます。OpenCVとPySimpleGUIを使うことで、画像の加工を簡単に行うことができます。
# 画像をグレースケールに変換する
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('img2', gray_img)
# 画像を2値化する
ret,threshold_img = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY)
cv2.imshow('img3', threshold_img)
# 画像のサイズを変更する
resized_img = cv2.resize(threshold_img, (400, 200))
cv2.imshow('img4', resized_img)
画像を保存する
画像を保存するには、OpenCVのimwrite関数を使います。imwrite関数には、保存する画像データと保存先のパスを渡します。パスには、拡張子を含めて指定します。また、保存したい画像のフォーマットを指定することも可能です。PySimpleGUIを使って画像を保存するには、ボタンを押した時にimwrite関数を実行するようにプログラムを書きます。
# 画像を保存する
cv2.imwrite('threshold_img.jpg',threshold_img)
実際に下記コードを実行してみます。
import cv2
# 画像を読み込む
img = cv2.imread('img/1.png')
cv2.imshow('img1', img)
# 画像をグレースケールに変換する
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('img2', gray_img)
# 画像を2値化する
ret,threshold_img = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY)
cv2.imshow('img3', threshold_img)
# 画像のサイズを変更する
resized_img = cv2.resize(threshold_img, (400, 200))#400,200ピクセルに縮小
cv2.imshow('img4', resized_img)
# 画像を保存する
cv2.imwrite('threshold_img.jpg',threshold_img)
key = cv2.waitKey(0)
if key == ord('q'):#キーボードでqを押したら、終了
cv2.destroyAllWindows()
実行するとこのように、4つのwindowが表示され、元画像、グレースケール画像、2値化画像、サイズ変更画像が表示されます。このように簡単に画像処理が可能になります。
PysimpleGUIとopenCVの画像処理ソフト作成
では実際に、PysimpleGUIに画像処理ボタンを組み込んでいきます。コードの流れはこちらになります。
また、PysiimpleGUIの説明は以前に別の記事で紹介しているので、参考にしてみてください。
- GUIレイアウト作成(ボタン配置、コメントなど)
- 各ボタンの処理を設定(if event == ボタン)
- 3つのボタンのopenCVの処理内容を設定
import PySimpleGUI as sg
import cv2
# レイアウト
layout = [
[sg.Text('ボタンを押してください')],
[sg.Image(filename='./img/1.png',size=(512,512),key='-img-')],
[sg.Button('グレースケール化'), sg.Button('2値化'), sg.Button('サイズ変更')]
]
# ウィンドウ生成
window = sg.Window('画像処理', layout)
# イベントループ
while True:
img = cv2.imread('img/1.png')
event, values = window.read()
if event in (None, 'Cancel'):
break
# 各ボタンの処理
if event == 'グレースケール化':# グレースケール化処理
img = cv2.imread('img/1.png')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgbytes = cv2.imencode('.png', gray_img).tobytes()
window['-img-'].update(data=imgbytes)
if event == '2値化': # 2値化処理
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret,threshold_img = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY)
imgbytes = cv2.imencode('.png', threshold_img).tobytes()
window['-img-'].update(data=imgbytes)
if event == 'サイズ変更':# サイズ変更処理
resized_img = cv2.resize(img, (400, 200))
imgbytes = cv2.imencode('.png', resized_img).tobytes()
window['-img-'].update(data=imgbytes)
window.close()
最後に実際に動かした動画を残します。
こんな感じで簡単にGUIを作ることができます。
まとめ
OpenCVとPySimpleGUIを使うことで、初心者でも簡単に画像処理を行うことができます。OpenCVは画像処理のためのライブラリで、PySimpleGUIはGUIを作成するためのライブラリです。この2つを組み合わせることで、画像処理プログラムを作成し、画像を取り込んで加工したり、保存したりすることができます。画像処理を行う際のプログラムを作成するのに便利なツールなので、初心者の方にもぜひ試してみてください。