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

Python中使用cv2HoughCircles()函数进行圆形对象的检测

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

在Python中,我们可以使用OpenCV库中的cv2.HoughCircles()函数来检测图像中的圆形对象。这个函数利用了霍夫变换的原理来进行圆检测。

该函数的使用方式如下:

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

参数说明:

- image:输入的灰度图像

- method:使用的霍夫变换方法。一般情况下使用cv2.HOUGH_GRADIENT即可。

- dp:图像分辨率与圆心检测分辨率的比值。默认值为1,表示检测图像的分辨率与原图一致。

- minDist:两个圆之间的最小距离。如果设置得太小,可能会导致多个相邻圆检测成一个,如果设置得太大,则可能会错过一些圆。需要根据具体情况进行调整。

- param1:Canny边缘检测的高阈值。一般设为100即可。

- param2:检测阶段累加器的阈值。一般设为30即可。

- minRadius:圆的最小半径。如果设置得太小,可能导致错误检测,如果设置得太大,则可能漏掉一些小圆。

- maxRadius:圆的最大半径。

该函数会返回一个包含检测到的圆的信息的数组,每个圆有三个数值,分别是圆心的x坐标、y坐标和圆的半径。

下面我们来看一个例子:

import cv2
import numpy as np

# 读取图像
image = cv2.imread("circle.png", 0)

# 去噪
image = cv2.GaussianBlur(image, (5, 5), 0)

# 霍夫圆检测
circles = cv2.HoughCircles(image, cv2.HOUGH_GRADIENT, 1, 50, param1=100, param2=30, minRadius=10, maxRadius=50)

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.imshow("Circle Detection", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个例子中,我们先使用cv2.GaussianBlur()函数对原图像进行高斯模糊处理,以减少噪声的干扰。然后,我们使用cv2.HoughCircles()函数进行圆检测。最后,我们使用cv2.circle()函数在图像中绘制检测到的圆。

你可以根据具体的需要调整参数来获取更好的圆检测结果。同时,你也可以使用其他图像处理方法对图像进行预处理,以提升圆检测的准确性。