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

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

发布时间:2023-12-11 16:46:44

cv2.HoughCircles()函数是OpenCV库中的一个函数,用于在图像中进行圆形检测。

函数原型:

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

参数说明:

- image:输入的图像,通常为灰度图像。

- method:检测方法,目前只支持cv2.HOUGH_GRADIENT。

- dp:累加器图像的分辨率与原图像之比的倒数。如果dp=1,则两者相同;如果dp=2,则累加器图像的分辨率比原图像低2倍。

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

- param1:用于处理边缘检测的阈值(Canny边缘检测阈值)。

- param2:圆心累加器阈值参数。

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

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

返回值:

circles:输出的检测到的圆的信息,包括圆心坐标和半径。

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

import cv2
import numpy as np

# 读取图像
img = cv2.imread('image.jpg', 0)

# 图像预处理,例如高斯滤波、边缘检测等
blur = cv2.GaussianBlur(img, (5, 5), 0)
edges = cv2.Canny(blur, 50, 150)

# 进行圆形检测
circles = cv2.HoughCircles(edges, cv2.HOUGH_GRADIENT, dp=1, minDist=100, 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(img, (x, y), r, (0, 255, 0), 4)

# 显示结果
cv2.imshow("circles", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个例子中,首先读取了一张图像,然后对图像进行了预处理,包括高斯滤波和边缘检测。然后使用cv2.HoughCircles()函数进行圆形检测,传入预处理后的图像和相应的参数。最后在图像上用绿色的圆圈标出了检测到的圆。

需要注意的是,cv2.HoughCircles()函数对于图像质量要求较高,需要在进行圆形检测前进行适当的预处理,以提高检测的准确性。可以根据具体的应用场景调整参数,以获得 的圆形检测效果。