我想获得连续区域的轮廓,但输出中没有非常狭窄的地方。
通过调用 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)
输出:
关于c++ - 使用 OpenCV 找到没有狭窄瓶颈的连续区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41432128/