opencv チュートリアルチャレンジ5 モルフォロジー変換
モルフォロジー変換 — OpenCV-Python Tutorials 1 documentation
モルフォロジー変換
とりあえず、カーネルはこれでテスト。
kernel = np.ones((5,5),np.uint8) [ [ 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1 ] ]
ということだ。
[ [ 0, 0, 1, 0, 0 ], [ 0, 0, 1, 0, 0 ], [ 0, 0, 1, 0, 0 ], [ 0, 0, 1, 0, 0 ], [ 0, 0, 1, 0, 0 ] ]
とすれば、縦方向にだけ評価して適用してくれる、、、のかな。
元画像はこれ
おそらく、黒い背景
が前提の処理だと思う。
収縮(Erosion)
img = cv2.erode(img,kernel,iterations = 1)
膨張(Dilation)
dilation = cv2.dilate(img,kernel,iterations = 1)
オープニング(Opening)
オープニング処理は 収縮の後に膨張 をする処理です.上述したようにノイズ除去に有効です
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
クロージング(Closing)
クロージング処理はオープニング処理の逆の処理を指し, 膨張の後に収縮 をする処理です.前景領域中の小さな(黒い)穴を埋めるのに役立ちます
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
モルフォロジー勾配
膨張した画像と収縮した画像の差分をとる処理です.
結果として物体の外郭(境界線)が得られます.
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
トップハット変換
ブラックハット変換
この2つは、使いみちが分かっらない・・・
カーネルの変更
カーネルを変えてみた。
kernel = np.array([ [ 0, 0, 1, 0, 0], [ 0, 0, 1, 0, 0], [ 0, 0, 1, 0, 0], [ 0, 0, 1, 0, 0], [ 0, 0, 1, 0, 0] ], dtype = np.uint8) img = imgOrg img = cv2.erode(img,kernel,iterations = 1) cv2.imshow('erode2', img) cv2.imwrite('erode2.png', img)
全部1と比較してみる。
全部1
縦に1