Pythonで白黒写真を作成

グレースケール化の様子 プログラミング

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をグレースケール値に揃えて、画像を表示。

といった感じです。

コメント

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