Opencv 霍夫变换的完整攻略
Opencv 霍夫变换是一种常用的图像处理技术,可以用于直线和圆的检测、形状匹等。本文将详细讲解Opencv 霍夫变换的完整攻略,包括基本原理、方法和两个示例。
Opencv 霍夫变换的基本原理
Opencv 霍夫变换是一种基于数学变换的图像处理技术,通过将图像中的素点映射到霍夫空间中,实现对直线和圆的检测。其中,直线检测是通过在霍夫空间寻交点来实现的,圆检测是通过在霍夫空间中寻找圆心和半径来实现的。具体实现方法包括:
- cv.HoughLines函数:用于直线检测。
- cv2.HoughCircles函数:用于圆检测。
Opencv 霍夫变换的使用方法
Opencv库提供cv2.HoughLines函数和cv2.HoughCircles函数,可以用于直线和圆的检测。函数的基本语法如下:
lines = cv2.HoughLines(image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]])
circles = cv2.HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]])
其中,image表示输入图像,rho和theta表示霍夫空间的分辨率,threshold表示直线或圆的阈值,lines表示输出的直线,circles表示输出的圆,srn和stn表示霍夫梯度的分辨率,min_theta和max表示直线的最小和最大角度,method表示检测圆的方法,dp累加器分辨与图像分辨率的比值minDist表示圆心之间的最小距离,param1和param2表示检测圆的阈值,minRadius和maxRadius表示圆的最小和最大半径。
示例说明
下面是两个Opencv 霍夫变换的示例:
1:使用oughLines函数检测直线
import cv2
import numpy as np
# 读取图像
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用HoughLines函数检测直线
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 = int0 - 1000 * (a))
cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
# 显示原始图像和绘制直线后的图像
cv2.imshow('image', img)
cv2.waitKey()
cv2.destroyAllWindows()
运行该代码,系统会显示原始图像和绘制直线后的图像。
示例2:使用HoughCircles函数检测圆
import cv2
import numpy as np
# 读取图像
img = cv.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用HoughCircles函数检测圆
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1,20, param=50, param2=30, min=0, maxRadius=0)
# 绘制圆
if circles is not None:
circles = np.uint16(np.around(circles))
for i in circles[0, :]:
cv2.circle(img, (i[0], i[1]), i[2], (0, 255, 0), 2)
# 显示原始图像和绘制圆后的图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行该代码,系统会显示原始图和绘制圆后的图像。
结论
Opencv 霍夫变换是一基于数学变换的图像处理技术,通过将图像中的像素点映射到霍夫空间中,实现对直线和圆的检测。通过Opencv中的cv2.HoughLines和cv2.HoughCircles,可以实现对直线和圆的检测。通过本文介绍,应该已了解了Opencv 霍夫变换的基本原理方法和两个示例说明,根据需要灵活使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Opencv 霍夫变换 - Python技术站