OpenCVにて2値化を行ってみる
OpenCV(オープンシーヴィ)とはインテルが開発・公開したオープンソースの画像処理ライブラリとなります。ここでは画像の2値化について説明します。2値化とは黒、白の単原色の2つの色で描画されることです。
ソースコード
事前準備としてカラー画像をモノクロに変換します。
1 2 3 4 5 |
import cv2 img = cv2.imread('★画像ファイル★') cv2.imshow("original",img) cv2.waitKey(0) cv2.destroyAllWindows() |
モノクロに表示されました。この画像を用いて2値化を行っていきます。2値化の方法にはOTSU、しきい値を設定する、adaptiveThresholdを用いる方法があります。しきい値とはその値より小さい場合は0、その値より大きい場合は1などの基準となる値となります。
OTSUを用いて2値化を行う
1 2 3 4 5 |
ret,img_otsu = cv2.threshold(img,0,255,cv2.THRESH_OTSU) cv2.imshow("img_otsu",img_otsu) cv2.imwrite("./output/img_otsu.jpg",img_otsu) cv2.waitKey(0) cv2.destroyAllWindows() |
cv2.threshold(img,0,255,cv2.THRESH_OTSU)のように記載することでOTSUに変換することができます。この際のしきい値はretに格納されています。
しきい値を設定する
1 2 3 4 5 6 |
threshold = 128 ret,img_threshold = cv2.threshold(img,threshold,255,cv2.THRESH_BINARY) cv2.imshow("img_threshold",img_threshold) cv2.imwrite("./output/img_threshold.jpg",img_threshold) cv2.waitKey(0) cv2.destroyAllWindows() |
直接、しきい値を設定することで任意に変化することができます。
adaptiveThresholdを用いる
1 2 3 4 5 |
img_adaptive = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,3,1) cv2.imshow("img_adaptive",img_adaptive) cv2.imwrite("./output/img_adaptive.jpg",img_adaptive) cv2.waitKey(0) cv2.destroyAllWindows() |
しきい値の設定やOTSUとは異なる形態の白黒画像を表示することが出来ました。