赞
踩
霍夫变换(Hough Transform)是一种图像处理技术,用于检测图像中的直线、圆和其他简单形状。它通过将图像空间(像素空间)中的点映射到参数空间,从而将形状检测问题转换为参数空间中的峰值检测问题。霍夫变换最常用的应用是直线检测和圆检测。
在直线检测中,霍夫变换将图像中的点映射到直线参数空间。通常有两种表示直线的方式:
其中,(\rho) 是从原点到直线的垂直距离,(\theta) 是从x轴正方向逆时针旋转到该垂直线的角度。
在OpenCV中,有两种实现霍夫直线变换的方法:
cv2.HoughLines
cv2.HoughLinesP
cv2.HoughLines
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, apertureSize=3) # 标准霍夫变换 lines = cv2.HoughLines(edges, 1, np.pi / 180, 200) # 绘制检测到的直线 if lines is not None: for rho, theta in lines[:, 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('Detected Lines', img) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.HoughLinesP
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, apertureSize=3) # 概率霍夫变换 lines = cv2.HoughLinesP(edges, 1, np.pi / 180, threshold=100, minLineLength=100, maxLineGap=10) # 绘制检测到的直线 if lines is not None: for line in lines: x1, y1, x2, y2 = line[0] cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2) cv2.imshow('Detected Lines', img) cv2.waitKey(0) cv2.destroyAllWindows()
霍夫圆变换是霍夫变换的另一种形式,用于检测图像中的圆。
在OpenCV中,可以使用 cv2.HoughCircles
来实现霍夫圆变换。
import cv2 import numpy as np # 读取图像并转换为灰度图 img = cv2.imread('image.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 应用高斯模糊 gray = cv2.GaussianBlur(gray, (9, 9), 2) # 霍夫圆变换 circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, dp=1.2, minDist=30, param1=50, param2=30, minRadius=10, maxRadius=100) # 绘制检测到的圆 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.circle(img, (i[0], i[1]), 2, (0, 0, 255), 3) cv2.imshow('Detected Circles', img) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.HoughLines
)和概率霍夫变换(cv2.HoughLinesP
)来检测图像中的直线。标准霍夫变换适用于检测直线较多的场景,而概率霍夫变换更适合检测少量且较长的直线。cv2.HoughCircles
检测图像中的圆形物体。通过调节参数,可以检测不同大小和不同间距的圆。霍夫变换在图像处理和计算机视觉中有广泛的应用,尤其适用于检测图像中的几何形状,如直线和圆。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。