NumPy と PIL を使って白黒写真を作る方法をご紹介します。
使用するモジュール・ライブラリについて
今回は、NumPyとPILを使います。
その前に、それぞれPythonでどんな効力を発揮するのかご紹介します。
NumPy:数値計算を効率的に行うための拡張モジュール
PIL :Python Imaging Library の略で 画像処理ライブラリ
つまり、NumPyとPILを使うことで画像を多次元配列的に考えることができるんです。
この特徴を使って、白黒写真を作成します。
グレースケール化について
グレースケールとは、光度以外の情報が含まれていない画像のことを言います。
一般的なグレースケール化の方法を使用して、白黒写真を再現します。
各ピクセルのRGBを使い
「白黒」=赤(R)×0.299 + 緑(G)×0.587 + 青(B)×0.114
各ピクセルのRGBを「白黒」の値に変換してあげる。これで、グレースケール化が行われます。
それでは、上記を踏まえてさっそくやっていきましょう!!
今回扱う写真は↓です。
鮮やかな写真の方が、白黒写真との違いが分かりやすと思ったので、
この画像にしました。
グレースケール化(白黒写真)
import numpy as np#numpyをnpとしてインポート from PIL import Image#PILライブラリからImageをインポート img_o = np.array(Image.open('hima.jpg')) height,width = img_o.shape[0],img_o.shape[1] img = np.empty((height,width,3),dtype='uint8')#三次元配列を作成 for i in range(height): for j in range(width): red=int(np.floor((img_o[i][j][0]))) green=int(np.floor((img_o[i][j][1]))) blue=int(np.floor((img_o[i][j][2]))) g=red*0.299+green*0.587+blue*0.114#グレースケール化 img[i][j][0], img[i][j][1],img[i][j][2]=g,g,g img_pil = Image.fromarray(img) img_pil.show()
※3行目で画像がファイルが指定されています。各自パス指定をしっかり行ってください。
このプログラムでは、pythonファイルと画像ファイルが同じフォルダーに入っているので、
画像名だけで大丈夫になっています。
pythonファイルと画像ファイルが同じフォルダーに入っているとは、
「hima.jpg」「ぷろ.py」(上のプログラム) が、上の画像のように同じフォルダーに
格納されているということです。
上手く実行できると、↓のような画像が表示されます。
プログラムの解説
「img_o」に指定した画像の ピクセル情報 を格納。
「height」に元の画像の 高さ情報 を格納。
「width」に元の画像の 横幅情報 を格納。
2重のfor文で、各ピクセルの位置を指定させ
指定したピクセルに、元画像の各ピクセルのRGBから算出した、
グレースケール値 (赤(R)×0.299 + 緑(G)×0.587 + 青(B)×0.114)を代入。
各ピクセルのRGBをグレースケール値に揃えて、画像を表示。
といった感じです。
コメント