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

生成圆形检测器的Python实现:cv2HoughCircles()

发布时间:2023-12-11 16:47:51

在OpenCV库中,cv2.HoughCircles()函数可用于检测图像中的圆形。它基于霍夫变换算法,可以帮助我们找到输入图像中的圆,即使在有噪声和遮挡的情况下也能够有效工作。

下面是cv2.HoughCircles()函数的语法:

cv2.HoughCircles(image, method, dp, minDist, param1, param2, minRadius, maxRadius)

参数说明:

- image:输入的单通道灰度图像。

- method:定义霍夫变换的检测方法。目前OpenCV支持CV_HOUGH_GRADIENT基于梯度的方法。

- dp:霍夫空间的分辨率与输入图像的分辨率之比。

- minDist:检测到的圆之间的最小距离。

- param1:方法特定的参数1,它对应于CV_HOUGH_GRADIENT方法中的高阈值。

- param2:方法特定的参数2,它对应于CV_HOUGH_GRADIENT方法中的低阈值。

- minRadius:圆的最小半径。

- maxRadius:圆的最大半径。

下面是一个使用cv2.HoughCircles()函数检测图像中圆的简单示例:

import cv2
import numpy as np

# 读取图像
image = cv2.imread('circle_image.jpg')

# 灰度化图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 霍夫圆变换
circles = cv2.HoughCircles(gray_image, cv2.HOUGH_GRADIENT, dp=1, minDist=20, param1=50, param2=30, minRadius=0, maxRadius=0)

# 确保检测到至少一个圆
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)
        cv2.circle(image, (x, y), 2, (0, 0, 255), 4)

    # 显示结果
    cv2.imshow("Circle detection", image)
    cv2.waitKey(0)

在上述示例中,我们首先读取了一张包含圆的图像。然后将图像转换为灰度图像,以便于圆形检测器的实现。接下来,我们使用cv2.HoughCircles()函数检测圆。

cv2.HoughCircles()函数返回一个包含圆的列表,每个圆由其圆心坐标和半径表示。我们遍历列表并使用cv2.circle()函数绘制检测到的圆。最后,我们展示了绘制了圆的图像。

需要注意的是,cv2.HoughCircles()返回的圆的坐标和半径为浮点类型。为了适应cv2.circle()函数的要求,我们将它们转换为整数类型。

这是一个简单的使用cv2.HoughCircles()函数的例子。你可以尝试在其他图像上检测圆,也可以根据具体需求调整函数的参数来获得更好的检测效果。