【问题标题】:Not able to find exact contour detection (opencv, python)无法找到精确的轮廓检测(opencv,python)
【发布时间】:2017-09-14 18:12:26
【问题描述】:

我正在处理这张图片:

我使用了以下代码:

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

得到了这些轮廓:

我已经尝试了所有这些功能,例如模糊、阈值处理等,但我没有得到我期望的轮廓。我需要找到黑色轮廓和紫色轮廓,如容器,但我得到的是文本周围的轮廓,而不是它们的背景容器。

对不起,我的英语不好。如果您还需要什么,请询问。

【问题讨论】:

  • @sturkmen 感谢您的评论....同样的问题我在那里注意到....它在前景中找到轮廓而不考虑背景颜色正在变化的轮廓......
  • 对不起,我没有仔细阅读您的问题。您能在图片上显示所需的结果吗?
  • imgur.com/a/ECX3N 请找到所需结果的链接。
  • 并不是说你不能用图像处理和视觉来完成这个任务,但是实际解析 HTML 以获得你想要的东西不是更容易吗?大多数图像处理方法对此类问题的问题是此类模板之间的颜色变化。对于这样的页面,最常见的三种颜色似乎是背景颜色,因此如果您确实想使用纯图像处理,可以使用直方图选择三种最常见的颜色并分别围绕每种颜色创建轮廓。跨度>

标签: python opencv opencv-contour


【解决方案1】:

经过大量研究后,我正在回答我自己的问题,认为它可以帮助遇到同样问题的人。

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

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

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

【讨论】:

    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 2020-09-14
    • 2016-03-27
    相关资源
    最近更新 更多