我想获取连续区域的轮廓,但是在输出中不要有非常狭窄的位置。
输入图像看起来像此图像(应用阈值后):
通过仅调用OpenCVs findContours方法,我得到以下结果:
我的问题是我不想在结果中出现狭窄的(白色)峰。仅模糊图像是行不通的,因为我不能包括黑峰。因此,所需的输出应类似于此绿线:
是否可以告知OpenCV(findContours)该区域的最小“厚度”?
最佳答案
Erosion可以认为是将边界像素添加到背景中。因此,它消除了输入中的狭窄部分。但是,由于它扭曲了所有边界,因此您需要在以后应用dilation,以消除腐 eclipse 对实际边界的影响。腐 eclipse +膨胀过程称为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)
输出: