2

我有一张简单的图片,我想提取线条的端点。但是,还有其他线条重叠,因此,我的线条中有“间隙”。 10 行的二值图像

我正在尝试使用 HoughLinesP 来提取这十行的参数化,虽然视觉结果是合理的,但它仍然给了我 43 条单独的行。 HoughLinesP 表示

我尝试过平滑线条,线条的骨架表示,在每一条之后重新绘制线条,我现在正在与countours合作。我已经调整了我的参数(行长、最大间隙、阈值等),但我无法将其减少到十行。在我当前的代码中,我从自身中减去第一个图像以创建一个新的黑色空间来绘制我的 HoughLines,这可能不是最有效的,但它是有效的。这是我的代码:

    import numpy as np
    import cv2

    img = cv2.imread('masked.png')

    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    edges = cv2.Canny(gray,50,150,apertureSize = 3)

    minLineLength = 100

    img2 = cv2.subtract(img, img)

    lines = cv2.HoughLinesP(gray,1,np.pi/180,10,minLineLength,maxLineGap=100)

    print(len(lines))

    for n in range(len(lines)):
        for x1,y1,x2,y2 in lines[n]:
            cv2.line(img2,(x1,y1),(x2,y2),(0,255,0),1,4)

    cv2.imshow('result.png', img2)

    cv2.waitKey(0)
    cv2.destroyAllWindows()

是否有另一种方法可以让我填补这些空白并拉出十个直线方程?我现在正在使用 Python、OpenCV 和 Numpy。

4

0 回答 0