窄的瓶颈连续的区域我想要得到的轮廓的不断区,但不必在输出非常狭窄的地方。查找不使用OpenCV的
通过打电话只是OpenCVs findContours方法,我得到以下结果:
我的问题是,我不希望在结果中具有窄(白色)峰。只是模糊图像将不起作用,因为我不能包括黑色峰。所以想要的输出应该看起来像这条绿线:
是否有可能告诉OpenCV(findContours)该区域的最小“厚度”?
窄的瓶颈连续的区域我想要得到的轮廓的不断区,但不必在输出非常狭窄的地方。查找不使用OpenCV的
通过打电话只是OpenCVs findContours方法,我得到以下结果:
我的问题是,我不希望在结果中具有窄(白色)峰。只是模糊图像将不起作用,因为我不能包括黑色峰。所以想要的输出应该看起来像这条绿线:
是否有可能告诉OpenCV(findContours)该区域的最小“厚度”?
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)
输出:
谢谢,您的解决方案完美无缺! – wessnerj
使用腐蚀,然后用扩张小仁你做findContours
之前。有一个在OpenCV的一种特殊的经营者,不只是说,叫Opening与morphologyEx
像这样的东西应该工作:
morphologyEx(src, dst, MORPH_OPEN, Mat());
你为什么不使用[形态学操作(http://docs.opencv.org/trunk/d9/d61/tutorial_py_morphological_ops.html)至摆脱那些? –