Python OpenCV3で画像の画素値を二値化して出力

画像を二値化(Binarization)する方法を紹介。

[amazonjs asin="4061538225″ locale="JP" title="OpenCVによる画像処理入門 (KS情報科学専門書)"]

 

前提

ディレクトリ構成などはこことかこことか。

&nbsp

元画像

空の画像(sora.jpg)を使う。

sora

 

thresholdメソッドの使い方

thresholdメソッドの使い方は次の通り。

[python title="filter2Dメソッドの使い方"]
cv2.threshold(img_src, thresh(閾値), 画素値の最大値, 二値化するためのタイプ)
[/python]

まず二値化するためのタイプとして選択できるのは以下の8種類。

cv2.THRESH_BINARY      cv2.THRESH_OTSU        cv2.THRESH_TRIANGLE
cv2.THRESH_BINARY_INV  cv2.THRESH_TOZERO      cv2.THRESH_TRUNC
cv2.THRESH_MASK        cv2.THRESH_TOZERO_INV

上の全てではないが、一部の画素値と閾値の関係は以下の図の通り。

binarization_type

 

閾値を変更することで、二値化するときの画素数の基準を変更できる。
画素数の最大値は255でOK。

 

画像の二値化

sourceディレクトリにbinarization.pyを作成する。

[python title="binarization.pyの内容"]
# -*- coding: utf-8 -*-

import cv2
import numpy as np

if __name__ == '__main__’:

# 画像の読み込み
img_src = cv2.imread("./image/sora.jpg", 1)

# グレースケールに変換
img_gray = cv2.cvtColor(img_src, cv2.COLOR_BGR2GRAY)

# 二値変換
thresh = 100
max_pixel = 255
ret, img_dst = cv2.threshold(img_gray,
thresh,
max_pixel,
cv2.THRESH_BINARY)

# 表示
cv2.imshow("Show BINARIZATION Image", img_dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

[/python]

実行してみる。

[shell]
(opencv_python)$ python binarization.py
[/shell]

スクリーンショット 2015-07-06 0.08.46

 

試しに二値化のタイプをTHRESH_BINARYからTHRESH_TOZEROに変えた結果は以下のとおり。

スクリーンショット 2015-07-06 0.08.17

 

ちょっと印象的?