利用cv2.HoughLines()函数实现霍夫变换检测直线,并把检测的直线绘制到图片内。
时间: 2023-08-14 10:07:33 浏览: 93
OpenCV利用霍夫变换进行直线检测
好的,可以的。以下是一个示例代码,使用cv2.HoughLines()函数检测图片中的直线,并将检测到的直线绘制到图片内:
```python
import cv2
import numpy as np
# 读取图片
img = cv2.imread('test.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 边缘检测
edges = cv2.Canny(gray,50,150,apertureSize = 3)
# 霍夫变换检测直线
lines = cv2.HoughLines(edges,1,np.pi/180,200)
# 绘制检测到的直线
for line in lines:
rho,theta = line[0]
a = np.cos(theta)
b = np.sin(theta)
x0 = a*rho
y0 = b*rho
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,0,255),2)
# 显示结果
cv2.imshow('result',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个示例代码中,我们首先读取一张图片,并将其转换为灰度图像。然后进行边缘检测,使用cv2.HoughLines()函数检测直线。最后,我们使用cv2.line()函数将检测到的直线绘制到原图像中,并显示结果。
需要注意的是,cv2.HoughLines()函数的参数很多,其中第三个参数是表示θ的精度,第四个参数是表示ρ的精度,这两个参数取值越小,检测到的直线越精细,但计算量也会增加。第五个参数是阈值,表示检测到的直线必须有足够的投票数才会被接受,这个参数的取值也会影响检测结果。
阅读全文