画像処理100本ノックというのをやろうと思います.
目次
Q.1. チャネル入れ替え
gazo01.py
import cv2
import numpy as numpy
img = cv2.imread("files/imori.jpg")
r = img[:, :, 2].copy()
b = img[:, :, 0].copy()
img[:, :, 0] = r
img[:, :, 2] = b
cv2.imwrite("newimori.jpg", img)
結果
備忘録
・cv2.imreadで読み込むとRGBはBGRの順で出力される
・numpy.ndarrayを取り扱うときは参照渡しに注意 最初.copy()をつけずにやってミスをした
Q.2. グレースケール化
画像をグレースケールにせよ。 グレースケールとは、画像の輝度表現方法の一種であり下式で計算される。
Y = 0.2126 R + 0.7152 G + 0.0722 B
gazo02.py
import cv2
import numpy as np
img = cv2.imread("files/imori.jpg")
img = img * [0.0722, 0.7152, 0.2126]
img = img.sum(axis=2)
cv2.imwrite("newimori2.jpg", img)
結果
備忘録
・グレースケールの場合各ピクセルに格納されている値はYひとつのみ
Q.3. 二値化
画像を二値化せよ。 二値化とは、画像を黒と白の二値で表現する方法である。 ここでは、グレースケールにおいて閾値を128に設定し、下式で二値化する。
y = { 0 (if y < 128) 255 (else)
gazo03.py
import cv2
import numpy as np
img = cv2.imread("newimori2.jpg")
img = np.where(img <128, 0, 255)
cv2.imwrite("newimori3.jpg", img)
結果
備忘録
・まあいいかなと思って2問目で作ったグレースケールの画像をもとにしました
・if は np.where