2値化
◉2値化とは?
画像には、暗い部分から明るい部分まであるが、
最も暗い部分を「0」、
最も明るい部分を「255」だとすると、
0〜255までの数字で様々な明るさを表現することができる。
この方法はグレースケールで、
今回は白と黒だけの2種類状態にする。
グレースケールよりさらに浮き上がらせるイメージ。
◉白と黒?
0〜255の間で「この辺りかな?」というところで、任意の線を決める。
例えば、100で線を引いたとする。
これを「閾値(しきいち)」と呼ぶ。
閾値より下を黒「0」、上を白「255」に変換する。
◉2値化を使う理由
対象物をより鮮明にでき、画像のノイズを除去することもできるため。
画像検出の前処理で使われることが多く、
また、最近では、車が車線からはみ出さないようにするアシスト機能にも
使われている。
◉2値化する方法
cv2.threshold(画像, 閾値, 最大値, 2値化の方法)
⚫︎画像:2値化したい画像
⚫︎閾値:任意の値
⚫︎最大値:閾値以上の場合は変換する明るさ
⚫︎2値化の方法:閾値以上の輝度を最大、以下の輝度を0にするコード「cv2.THRESH_BINARY」
<画像を2値化するPythonコード例>
import sys
import cv2
if len(sys.argv)<2:
print('表示したいファイル名を指定してください。')
sys.exit()
file = sys.argv[1]
try:
img = cv2.imread( ' file ' )
if img is None:
raise ValueError('ファイルが見つかりません')
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
retValue, img_thresh = cv2.threshold(img_gray, 100, 200, cv2.THRESH_BINARY)
cv2.imshow(file, img_thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
except ValueError as e:
print(e)
except:
import traceback
traceback.print_exc()
単純2値化では処理こそ単純だが、処理後の画像に滑らかさは無くなる。