Hough变换,是用来检测直线的重要方法。
本文,介绍一下,用python-opencv模块来检测直线的方法。
工具/原料
-
电脑
-
python3.6
方法/步骤
-
首先,要往python编译器里面加载模块和图片。
# -*- coding: utf-8 -*-
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread("C:/……/a.jpg") #需要图片的绝对路径
cv2.imshow('0', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
-
运行上图的代码,可以显示原图。
-
把图片变成灰度图:
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
-
用Canny算子检测图像的边界。
这里的原理,就是图像卷积处理,而Canny算子就是卷积内核,又叫卷积模版。
edges = cv2.Canny(gray,50,200)
-
用Hough变换来检测edges里面的直线:
ls = cv2.HoughLines(edges,1,np.pi/180,100)
l1 = ls[:,0,:]
输出直线的端点坐标
print(l1)
一共检测出9条直线。
-
在原图中把所有的直线,凸显出来:
for r,t in l1[:]:
a = np.cos(t)
b = np.sin(t)
x0 = a*r
y0 = b*r
x1 = int(x0 + 1000*(-b))
y1 = int(y0 + 1000*(a))
x2 = int(x0 - 1000*(-b))
y2 = int(y0 - 1000*(a))
cv2.line(img,(x1,y1),(x2,y2),(0,255,255),1)
-
运行,出图。
观察发现,有得线段没检测出来,而有的不存在的直线反而画出来了。
END
注意事项
-
直线检测的用处非常大。不如,无人驾驶技术,就需要用到直线检测。