在您提供的链接上查看HoughLinesP
import cv2
import numpy as np
img = cv2.imread('beach.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
minLineLength = 100
maxLineGap = 5
lines = cv2.HoughLinesP(edges, 1, np.pi/180, 50, minLineLength, maxLineGap)
for x1, y1, x2, y2 in lines[0]:
cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.imwrite('canny5.jpg', edges)
cv2.imwrite('houghlines5.jpg', img)
还要看一下 Canny 生成的边缘图像。您应该只能找到边缘图像中存在线条的线条。

这是覆盖在图像上的线检测输出:

玩弄变量minLineLength
并maxLineGap
获得更理想的输出。这种方法也不会像 HoughLines 那样为您提供长线,但看看 Canny 图像,也许这些长线一开始就不可取。