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

Python中利用cv2HoughCircles()函数来检测圆形对象

发布时间:2023-12-11 16:54:50

在Python中,可以使用OpenCV库中的cv2.HoughCircles()函数来检测图像中的圆形对象。该函数使用Hough变换来识别圆形,并返回检测到的圆形的参数。

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

下面是对cv2.HoughCircles()函数中参数的解释:

- image:输入图像,应该为灰度图像。

- method:定义使用的检测方法。目前OpenCV只支持cv2.HOUGH_GRADIENT,表示使用Hough梯度方法进行检测。

- dp:累加器分辨率与图像分辨率的反比例因子,一般为1。dp越大,则分辨率越低,检测到的圆可能性越大,但也可能导致错误检测。

- minDist:圆心之间的最小距离。如果两个检测到的圆的圆心距离小于此参数,则认为是同一个圆。一般应取图像的对角线长度的1/8。

- param1:高阈值Canny边缘检测的 个阈值。

- param2:累加器阈值。较高的阈值会得到更少的圆形,较低的阈值会得到更多的圆形。

- minRadius:检测到的圆的最小半径。

- maxRadius:检测到的圆的最大半径。

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

import cv2
import numpy as np

# 读取图像
image = cv2.imread('circle.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 高斯模糊
blur = cv2.GaussianBlur(gray, (5, 5), 0)

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

# 绘制检测到的圆
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("Detected Circles", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个例子中,首先使用cv2.imread()函数读取圆形对象的图像。然后将图像转换为灰度图像,并对灰度图像进行高斯模糊处理。接着,调用cv2.HoughCircles()函数,传入高斯模糊后的图像和其他参数,检测图像中的圆形对象。最后,使用cv2.circle()函数在图像上绘制检测到的圆形,并显示结果图像。

通过使用cv2.HoughCircles()函数,可以在图像中检测到圆形对象,并对其进行标记或其他进一步的处理。