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
