【问题标题】:Python OpenCV how to remove space between linesPython OpenCV如何删除行之间的空间
【发布时间】:2020-02-15 10:11:59
【问题描述】:

我有这张图片:

我的目标是将 L 形分隔为两个不同的矩形(两个共同构成 L 形)。对于长矩形没有问题,因为它被检测为轮廓。但是对于较宽的矩形,这是一个问题,因为两条线之间有一个空间。这个问题有解决办法吗?

我还没有为它写任何代码,所以我不能发布任何东西

提前致谢

【问题讨论】:

  • 您可以为此签出 OpenCV convexHull
  • @ZdaR 我们正在调查中
  • 应用凸包不会给出T交点处的点。你可以试试霍夫线,然后过滤掉相交点。不过可能需要大量的工程设计

标签: python opencv image-processing line contour


【解决方案1】:

如果您只想使用基于轮廓的方法,那么您可以尝试使用侵蚀。 对图像应用腐蚀并使用适当的参数,您可以以增加线条的粗细为代价来缩小间距,但我认为这对您的情况来说是可以的,因为您只依赖于轮廓提取。 试试这个:

kernel = np.ones((7,7), np.uint8)
eroded_im = cv2.erode(im, kernel, iterations=5 or 6)

【讨论】:

  • 对于膨胀,你需要反转图像
  • 根据这项工作,我将不胜感激对答案投反对票的原因。怎么回事?
  • 也许,其他人也有/有过这种关于腐蚀/扩张的困惑(通常,你“总是”有带有白线的黑色图像)。不幸的是,投票者不太可能回来恢复他们的投票。这就是我对此类问题发表评论而不是投票的原因。
【解决方案2】:

每当使用 OpenCV 执行图像处理时,您都希望将所需的操作对象设为白色,而背景设为黑色。在这种情况下,由于您要修改线条,因此首先需要反转图像,使线条为白色,背景为黑色。从这里,我们可以构造一个水平内核并执行形态闭合以将线条连接在一起。同样,如果您想关闭垂直线之间的空间,您可以使用垂直内核执行相同的步骤。

结果

代码

import cv2

image = 255 - cv2.imread('1.png', 0)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (60,1))
result = 255 - cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel, iterations=1)

cv2.imshow('result', result)
cv2.waitKey()

【讨论】:

    猜你喜欢
    • 2015-05-30
    • 2014-09-15
    • 2020-10-11
    • 2021-04-24
    • 2021-02-23
    • 2019-10-10
    • 2021-12-28
    • 1970-01-01
    • 2018-10-07
    相关资源
    最近更新 更多