欢迎访问宙启技术站
智能推送

利用cv2HoughCircles()在Python中检测圆形形状

发布时间:2023-12-11 16:45:38

cv2.HoughCircles()是OpenCV的一个函数,用于在图像中检测圆形形状。它基于霍夫变换,可以检测图像中的圆。

这是一个例子,展示如何使用cv2.HoughCircles()来检测图像中的圆形形状。

首先,我们需要导入必要的库:

import cv2
import numpy as np

接下来,我们需要加载图像:

image = cv2.imread('circle.jpg', 0)

cv2.imread()用于加载图像,参数'circle.jpg'是图像的文件名,0表示读取为灰度图像。

接下来,我们需要对图像进行预处理,以便于圆检测。预处理步骤包括模糊处理和边缘检测:

blur = cv2.GaussianBlur(image, (5, 5), 0)
edges = cv2.Canny(blur, 50, 150)

cv2.GaussianBlur()用于对图像进行高斯模糊处理,参数(5, 5)表示模糊核的大小,0表示标准差。cv2.Canny()用于进行边缘检测,参数50和150表示边缘检测的阈值。

接下来,我们可以使用cv2.HoughCircles()检测圆形形状:

circles = cv2.HoughCircles(edges, cv2.HOUGH_GRADIENT, 1, 100, param1=50, param2=30, minRadius=0, maxRadius=0)

cv2.HoughCircles()的 个参数是边缘检测后的图像,第二个参数表示检测方法,cv2.HOUGH_GRADIENT表示使用霍夫梯度法。第三个参数是图像分辨率与霍夫空间分辨率的比值。第四个参数是圆心之间的最小距离,如果检测到的两个圆心之间的距离小于这个值,将被视为同一个圆。param1和param2是霍夫梯度法的两个参数,用于指定圆心的检测阈值。minRadius和maxRadius指定了圆的最小半径和最大半径。

最后,我们可以将检测到的圆绘制在原始图像上进行展示:

if circles is not None:
    circles = np.round(circles[0, :]).astype("int")
    for (x, y, r) in circles:
        cv2.circle(image, (x, y), r, (0, 255, 0), 4)

circles是检测到的圆的结果,如果检测到了圆形形状,circles将不为空。我们可以使用np.round()将结果四舍五入为整数,并使用astype()将结果转换为整型。然后,我们可以使用cv2.circle()在原始图像上绘制圆形。

最后,我们可以展示绘制好的圆形图像:

cv2.imshow("Circle Detection", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imshow()用于展示图像,参数"Circle Detection"是窗口标题。cv2.waitKey(0)用于等待用户按下任意键,并关闭窗口。cv2.destroyAllWindows()用于关闭所有窗口。

这就是使用cv2.HoughCircles()在Python中检测圆形形状的示例。利用这个函数,我们可以有效地检测图像中的圆形形状。