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

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

发布时间:2023-12-11 16:52:04

在Python中,OpenCV库提供了cv2.HoughCircles()函数来检测图像中的圆形对象。HoughCircles()函数基于霍夫变换原理,通过在图像中搜索圆形轮廓来实现圆形检测。下面是使用例子:

import cv2
import numpy as np

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

# 进行圆形检测
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, dp=1, minDist=30, param1=50, 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.HoughCircles()函数进行圆形检测。

cv2.HoughCircles()函数的参数如下:

- gray: 输入的灰度图像

- cv2.HOUGH_GRADIENT: 使用基于梯度的方法进行霍夫变换

- dp=1: 累加器图像分辨率与原图像分辨率的比例,值为1表示相同分辨率

- minDist=30: 检测到的圆形中心之间的最小距离

- param1=50: 边缘检测阈值,值越大表示明显的边缘更少

- param2=30: 累加器阈值,值越小表示检测到的圆形越多

- minRadius=10: 圆的最小半径

- maxRadius=50: 圆的最大半径

在得到圆形检测结果后,将其存储在circles变量中,然后使用cv2.circle()函数在图像上绘制检测到的圆形。

最后,使用cv2.imshow()函数显示结果图像,cv2.waitKey()等待键盘输入,cv2.destroyAllWindows()关闭窗口。

请注意,在使用cv2.HoughCircles()函数之前,需要对图像进行预处理,例如灰度转换、模糊处理、边缘检测等,以提高圆形检测的准确性。