无法找到精确的轮廓检测(opencv,python)

时间:2017-09-14 18:12:26

标签: python opencv opencv-contour

我正在研究这张图片:

我使用了以下代码:

input_img = cv2.imread(input_image)
img = cv2.imread(input_image, 0)

kernel = np.ones((5,5),np.uint8)
# morphological_img = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
# # morphological_img = cv2.threshold(morphological_img, morphological_img, 128, 255, cv2.THRESH_BINARY_INV)
# # img = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

# morphological_img = cv2.medianBlur(morphological_img, 5)


canny_img = cv2.Canny(input_img, 100, 200)
_, contours, hierarchy = cv2.findContours(canny_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) # get contours

并得到了这些轮廓:

我已经尝试了所有这些功能,如模糊,阈值等,但我没有得到我期待的轮廓。我需要找到黑色轮廓和像容器一样的紫色轮廓,但是我在文本周围的轮廓而不是背景容器。

抱歉我的英语不好。如果您还需要其他信息,请询问。

1 个答案:

答案 0 :(得分:1)

我在研究了许多人之后回答了我自己的问题,认为它可以帮助那些陷入同样问题的人。

正如问题在这里......我们无法找到背景容器,但使用所有现有技术(如阈值,模糊等)......我无法得到。

因此,方法是添加边框(尺寸= 10或更多将起作用)并选择图像中不存在的颜色将为您提供所需的所有轮廓。

bordersize = 10
img = cv2.copyMakeBorder(img, top=bordersize, bottom=bordersize, left=bordersize, right=bordersize, borderType= cv2.BORDER_CONSTANT, value=[247, 248, 188] )