Python

【Python初心者向け】OpenCVとPySimpleGUIを使った画像処理入門

OpenCVとPySimpleGUIを使えば、簡単なGUIが作成でき、画像処理を簡単に行うことができます。OpenCVは、画像処理のためのライブラリです。またPySimpleGUIは、GUIを簡単に作成できるツールで、OpenCVを使って画像処理を行うためのインターフェースを提供します。
この2つのライブラリを使用して、実際にGUIの画像処理ソフトを作成してみましょう。

画像処理ってどうやるのかわからないし、GUIを作れないと、みんなに使ってもらえない。。。

PysimpleGUIとopenCVを使用すれば、簡単にGUIを作成し、画像処理ソフトを作成することができるよ。実際に使用してみましょう。

実際にGUIを作りたい方は多いと思いますが、非常に簡単で30分もあれば、一つ作ることができます。

【記事の対象者】
 ・pythonで画像処理をやってみたい。
 ・GUIを実際に作ってみたい人
 ・画像処理に興味があり、会社で使うためにGUIを作成したい人

🚀 0円で現役エンジニアから学べる【Techスクールオンライン】のお申込みをお勧めします。 このオンラインスクールでは、現役のエンジニアから直接学ぶことができ、プログラミングの基礎から高度なスキルまでを習得できます。しかも、今なら 0円 で受講できるチャンスです。 エンジニア転職を考えている方やプログラミングに興味がある方、新しいスキルを習得したい方に特におすすめです。

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の説明は以前に別の記事で紹介しているので、参考にしてみてください。

  1. GUIレイアウト作成(ボタン配置、コメントなど)
  2. 各ボタンの処理を設定(if event == ボタン)
  3. 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つを組み合わせることで、画像処理プログラムを作成し、画像を取り込んで加工したり、保存したりすることができます。画像処理を行う際のプログラムを作成するのに便利なツールなので、初心者の方にもぜひ試してみてください。

🚀 0円で現役エンジニアから学べる【Techスクールオンライン】のお申込みをお勧めします。 このオンラインスクールでは、現役のエンジニアから直接学ぶことができ、プログラミングの基礎から高度なスキルまでを習得できます。しかも、今なら 0円 で受講できるチャンス。
私がツナグバに登録してから、求人情報が豊富に届き、自分に合った仕事を見つけることができました。特に、第二新卒向けの求人情報が多いので、自分のスキルや経験を活かしながら新たなキャリアに挑戦することができました。転職活動は不安も多いですが、ツナグバのサポートがあれば、成功への道が明るく感じました。