単純2値化
これはグレースケールの画像の各画素全体に任意の閾値を設定し、画素が設定した閾値より上か下かで各画素に0(黒)か255(白)の2パターンで表現する手法です。
単純2値化では処理ロジックこそ単純ですが、グレースケールと違い、白か黒の2パータンでの表現になるので処理後の画像に滑らかさは無くなります。
元画像
単純2値化
基本的な使い方
ポイントとしては元の画像を一度グレースケールに変更します。
画像を2値化(白黒)する場合は基本的に以下のパターンで処理されます。
- 画像の読み込み
- 画像のグレースケール化
- 画像の2値化
今回のサンプルコードでは閾値を127にしています。
グレースケールは0〜256階調の濃淡で表現されるので、2値化する際は閾値を定め、白と黒に振り分けます。
サンプルコード
import cv2
import numpy as np
file_cat = 'img/cat.jpg'
color = cv2.imread(file_cat , 1)
#gray = cv2.cvtColor(file_cat, cv2.COLOR_BGR2GRAY) #グレースケール化
gray = cv2.imread(file_cat , 0) #グレースケール
height, width = gray.shape # 高さ・幅取得
thresh = 128 # 閾値
for i in range(height):
for j in range(width):
if gray[i][j] < thresh: # 閾値未満なら黒
gray[i][j] = 0
else: # 白色
gray[i][j] = 255
while True:
cv2.imshow("color", color) # ソース画像を表示
k = cv2.waitKey(1)
if k == ord('q'): # Qキーが押されたら終了
break
cv2.destroyAllWindows()