Pythonによる画像処理100本ノック#2 グレースケール化


はじめに

どうも、らむです。
画像処理ではお馴染みのグレースケール化を実装します。

2本目:グレースケール化

グレースケールは様々な画像処理の前処理として使われる事が多いです。画像処理を学ぶならば必ず知っておきましょう。
グレースケール化とは画像を黒色、白色、及びその中間色である灰色の濃淡を用いて画像を表現する手法です。
モノクロ画像は白黒2色のみであるのに対し、グレースケール画像では通常256色を用います。

なお、各画素は以下の式によって算出されます。
$$
P = 0.2126 R + 0.7152 G + 0.0722 B
$$

grayscale.py
import cv2
import matplotlib.pyplot as plt
import numpy as np
plt.gray()

def grayscale(img):
  # グレースケール画像用配列作成
  dst = np.zeros((img.shape[0], img.shape[1]))

  # グレースケール化
  dst[:,:] = (0.2126*img[:,:,2] + 0.7152*img[:,:,1] + 0.0722*img[:,:,0]).astype(np.uint8)

  return dst


# 画像読込
img = cv2.imread('image.jpg')

# グレースケール化
gray = grayscale(img)

# 画像保存
cv2.imwrite('result.jpg', gray)
# 画像表示
plt.imshow(gray)
plt.show()

 

画像左は入力画像、画像右は出力画像です。
しっかりグレースケール画像が作成できていますね。

おわりに

もし、質問がある方がいらっしゃれば気軽にどうぞ。
imori_imoriさんのGithubに公式の解答が載っているので是非そちらも確認してみてください。