如何用Python实现LSD直线检测,只有matlab的较为多见
https://blog.csdn.net/weixin_45246566/article/details/128042922
LSD(Line Segment Detector)是一种检测图像中直线的算法,可以用Python的OpenCV库实现。下面是实现LSD直线检测的基本思路:
读入图像
import cv2
img = cv2.imread('image.jpg')
转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
进行高斯滤波
blur = cv2.GaussianBlur(gray, (3, 3), 0)
进行LSD直线检测
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)
完整代码:
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()
需要注意的是,这个算法对于直线段的检测比较准确,但对于弧线或曲线的检测就不太适用了。