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

使用cv2HoughCircles()函数在Python中生成圆形对象检测器

发布时间:2023-12-11 16:49:00

cv2.HoughCircles()函数是OpenCV中用于检测图像中圆形对象的函数。它基于霍夫变换的原理,通过在图像中搜索圆的边缘来检测圆形对象。

函数原型如下:

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

参数解释:

- image:输入的8位单通道图像

- method:检测方法。目前OpenCV仅支持cv2.HOUGH_GRADIENT,表示使用梯度法检测圆。

- dp:圆心与半径分辨率之比。一般取1,即与图像分辨率相同。

- minDist:两个圆之间圆心的最小距离。

- circles:输出参数,检测到的圆数组。

- param1:Edge detection的高阈值,用于Canny边缘检测。

- param2:圆心检测阈值。较大的值可以使假阳性减少。

- minRadius:圆的最小半径。

- maxRadius:圆的最大半径。

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

import cv2
import numpy as np

# 读入图像
img = cv2.imread("circle.jpg", cv2.IMREAD_GRAYSCALE)

# 中值滤波去除噪声
img = cv2.medianBlur(img, 5)

# 调用HoughCircles检测圆
circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, dp=1, minDist=50, param1=50, param2=30, minRadius=0, maxRadius=0)

# 如果检测到圆
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.HoughCircles()函数来检测图像中的圆形对象。函数返回一个包含检测到的圆的数组。如果检测到圆,我们遍历数组并使用cv2.circle()函数绘制圆和圆心。最后显示带圆形对象的图像。

注意,cv2.HoughCircles()函数对于圆的检测结果比较敏感,对参数的选择需要根据具体情况进行调整,以获得 的结果。