图片中 python 的线检测

Line detection in python from a picture

我目前正在尝试对这种类型的图像进行线检测:

顶部和底部的黑条只是因为我拍照的位置,而不是由于调整大小或其他原因。

我使用了以下代码:

image = cv2.imread('test_2.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 100, 250)
lines = cv2.HoughLinesP(edges, 1, np.pi/180, 25, minLineLength=100, maxLineGap=50)

hough = np.zeros(image.shape, np.uint8)

for line in lines:
    x1, y1, x2, y2 = line[0]
    cv2.line(hough, (x1, y1), (x2, y2), (255, 255, 255), 2)

cv2.imwrite('hough.jpg', hough)

最后我得到了这些行:

有什么概念可以帮助我吗?

我已经尝试更改 CannyHoughLinesP 调用的不同参数,但似乎没有帮助。

编辑:我正在尝试检测图片上的所有线条。 3 条水平线,以及所有垂直线(交叉或刚好在水平线之上)以及斜线。 我的主要问题是一些垂直线没有出现,每条线都有 2 条霍夫线而不是一条,这正是我需要的。 我想我可以轻松处理双行问题,但我不确定如何处理缺少的行。

Hough 正在寻找边缘,而您却找到了脊。这解释了双线。

由于你的图片很容易二值化,你可以试试边缘细化。你会得到很好的、连续的像素延伸,你可以从中推断出线段。但是你可能不得不 "repair" 那些被长线穿过的人。