Erosionを背景に境界画素を追加すると考えることができます。したがって、それはあなたの入力のような狭い部分を取り除きます。しかし、すべての境界を歪ませるので、実際の境界でエロージョンの影響を取り消すには、その後dilationを適用する必要があります。浸食+膨張プロセスはopeningと呼ばれます。
以下のコード部分は、望ましい出力を生成します。画像サイズに応じてk_size
で遊んでください。次にfindContours
を適用します。
# Read and binarize the image
image = cv2.imread("test.png",cv2.IMREAD_GRAYSCALE)
ret, im_th =cv2.threshold(image,150,255,cv2.THRESH_BINARY)
# Set the kernel and perform opening
k_size = 7
kernel = np.ones((k_size,k_size),np.uint8)
opened = cv2.morphologyEx(im_th, cv2.MORPH_OPEN, kernel)
cv2.imwrite("opened.png", opened)
出力:あなたが[モルフォロジー演算](http://docs.opencv.org/trunk/d9/d61/tutorial_py_morphological_ops.html)を使用していないのはなぜ
それらを取り除く? –