Python实现LSD直线检测

如何用Python实现LSD直线检测,只有matlab的较为多见

https://blog.csdn.net/weixin_45246566/article/details/128042922

以下内容部分参考ChatGPT模型:


LSD(Line Segment Detector)是一种检测图像中直线的算法,可以用Python的OpenCV库实现。下面是实现LSD直线检测的基本思路:

  1. 读入图像

    import cv2
    img = cv2.imread('image.jpg')
    
  2. 转换为灰度图像

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
  3. 进行高斯滤波

    blur = cv2.GaussianBlur(gray, (3, 3), 0)
    
  4. 进行LSD直线检测

    lsd = cv2.createLineSegmentDetector(0)
    lines, widths, prec, nfa = lsd.detect(blur)
    
  5. 绘制检测到的直线

    for i in range(len(lines)):
     x1, y1, x2, y2 = lines[i][0]
     cv2.line(img, (int(x1), int(y1)), (int(x2), int(y2)), (0, 0, 255), 2, cv2.LINE_AA)
    

完整代码:

import cv2

img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (3, 3), 0)

lsd = cv2.createLineSegmentDetector(0)
lines, widths, prec, nfa = lsd.detect(blur)

for i in range(len(lines)):
    x1, y1, x2, y2 = lines[i][0]
    cv2.line(img, (int(x1), int(y1)), (int(x2), int(y2)), (0, 0, 255), 2, cv2.LINE_AA)

cv2.imshow('LSD', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

需要注意的是,这个算法对于直线段的检测比较准确,但对于弧线或曲线的检测就不太适用了。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快