Pythonで画像処理(2)白黒画像に変換する

IT

前回の記事では、Pythonを使って画像処理を行う前段として、PythonでGUIのウインドウを作成し、画像を表示するプログラムを作成しました。

今回は、GUIに変換ボタンを追加し、変換ボタンを押したらカラー画像を白黒画像に変換する処理を追加してみます。

プログラム全体は以下になります。

# -*- coding: utf-8 -*-
import tkinter
from PIL import Image, ImageTk
read_image = None
img = None
cvs = None
# 白黒変換処理
def make_painting():
global cvs,img,read_image
ret_img = read_image.convert('L')
# 編集した画像を画面に反映
img = ImageTk.PhotoImage(image=ret_img)
cvs.create_image(0, 0, image=img, anchor='nw')
if __name__ == "__main__":
# ファイル名指定
fname = "yama.jpg"
# ファイルを開く
read_image = Image.open(fname)
# 画像サイズを取得
w, h = read_image.size
# GUI作成
root = tkinter.Tk()
root.title("Image Test 2")
root.resizable(False, False)
# tkinterで表示できるように画像変換
img = ImageTk.PhotoImage(image=read_image)
# Canvasの準備
cvs = tkinter.Canvas(root, bg="black", width=w, height=h)
# Canvasに画像を描画
cvs.create_image(0, 0, image=img, anchor='nw')
cvs.pack()
# 変換ボタンを用意
button = tkinter.Button(root, text="変換", command=make_painting)
button.pack()
root.mainloop()
view raw imagetest2.py hosted with ❤ by GitHub

今回は、GUIに変換ボタンを追加し、白黒に変換する処理を追加しており、それ以外は前回と同一です。

追加部分を解説していきます。

read_image = None
img = None
cvs = None
view raw imagetest2.py hosted with ❤ by GitHub

5行目から7行目では、プログラム全体で利用するグローバル変数を初期化しています。

5行目の「read_image」は、画像処理モジュール「Pillow」で読み込むイメージオブジェクト変数用です。

6行目の「img」は、GUIモジュール「tkinter」で読み込むイメージオブジェクト変数用です。

7行目の「cvs」は、tkinterのキャンバスオブジェクト変数用です。

def make_painting():
global cvs,img,read_image
ret_img = read_image.convert('L')
# 編集した画像を画面に反映
img = ImageTk.PhotoImage(image=ret_img)
cvs.create_image(0, 0, image=img, anchor='nw')
view raw imagetest2.py hosted with ❤ by GitHub

10行目から15行目では、白黒画像に変換する関数を定義しています。

10行目で、関数「make_painting」の定義を開始しています。引数は取りません。

11行目で、グローバル変数を関数内で利用するための定義を追加しています。

12行目で、読み込んだカラー画像を白黒画像(グレースケール)に変換しています。

14行目で、変換した画像で、GUI用のイメージオブジェクトを更新しています。

15行目で、更新した画像オブジェクトでキャンバスを更新しています。


メイン処理には、ボタンを追加する処理を2行追記しています。

button = tkinter.Button(root, text="変換", command=make_painting)
button.pack()
view raw imagetest2.py hosted with ❤ by GitHub

43行目で、「変換」ボタンを作成し、白黒画像への変換関数「make_painting」をボタンをクリックした際のコマンドとして紐付けています。

44行目で、作成したボタンをGUIに反映しています。


それでは作成したプログラムを実行してみましょう。

実行すると下記ウインドウが表示されます。

カラー画像「yama.jpg」と変換ボタンが表示されました。

変換ボタンをクリックすると下記のようになります。

白黒画像(グレースケール)に変換されました。

グレースケールに変換する場合は、RGBそれぞれの値を足して平均値を計算し、平均値をRGBそれぞれに代入してグレーにする処理が必要ですが、Pythonなら、convert関数でたった一行です。

簡単ですが、今回は以上です。

次は、画像にモザイクを入れる処理をやってみたいと思います。

コメント

タイトルとURLをコピーしました