python实现霍夫变换,画出与canny边缘一致的直线
时间: 2023-06-10 13:03:42 浏览: 123
可以使用OpenCV库中的HoughLines方法实现霍夫变换,代码如下所示:
```python
import cv2
import numpy as np
# 读取图片并转为灰度图
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Canny边缘检测
edges = cv2.Canny(gray, 50, 150)
# 进行霍夫变换,得到直线集合
lines = cv2.HoughLines(edges, 1, np.pi/180, 200)
# 绘制直线
for line in lines:
rho, theta = line[0]
a, b = np.cos(theta), np.sin(theta)
x0, y0 = a*rho, b*rho
x1, y1 = int(x0 + 1000*(-b)), int(y0 + 1000*a)
x2, y2 = int(x0 - 1000*(-b)), int(y0 - 1000*a)
cv2.line(img, (x1, y1), (x2, y2), (0,0,255), 2)
# 显示图片
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这里的 HoughLines 方法会返回一组直线,每个直线由两个参数(极径和极角)表示。对于每个直线,我们可以将其转换为参数为 (x1, y1, x2, y2)(即直线在图像中的两个端点坐标),并使用 cv2.line() 方法在原图上绘制出来,达到与 canny 边缘一致的效果。
阅读全文