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

使用cv2HoughCircles()函数进行圆形形状检测的Python实现

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

使用cv2.HoughCircles()函数可以在图像中进行圆形形状的检测。该函数是基于霍夫变换的圆形检测算法。

首先,我们需要导入OpenCV库和numpy库:

import cv2
import numpy as np

接下来,我们读取要进行圆形检测的图像:

image = cv2.imread('image.jpg', 0)

然后,我们需要对图像进行预处理。可以使用高斯滤波来平滑图像,以减少图像中的噪声:

image_blur = cv2.GaussianBlur(image, (5, 5), 0)

接下来,我们可以使用cv2.HoughCircles()函数来进行圆形检测。该函数需要输入以下参数:

- image:要进行圆形检测的图像,通常是灰度图像。

- method:使用的检测方法。一般使用cv2.HOUGH_GRADIENT。

- dp:累加器分辨率与图像分辨率的比值。通常设置为1,表示两者相等。

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

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

- param2:累加器的阈值,用于确定检测到的圆是否是一个真实的圆。

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

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

circles = cv2.HoughCircles(image_blur, cv2.HOUGH_GRADIENT, dp=1, minDist=100, param1=50, param2=30, minRadius=0, maxRadius=0)

cv2.HoughCircles()函数返回一个包含检测到的圆的数组。每个圆由圆心坐标和半径组成。

最后,我们可以在原始图像上绘制检测到的圆:

if circles is not None:
    circles = np.round(circles[0, :]).astype(int)
    for (x, y, r) in circles:
        cv2.circle(image, (x, y), r, (255, 0, 0), 2)

完整的代码如下所示:

import cv2
import numpy as np

image = cv2.imread('image.jpg', 0)
image_blur = cv2.GaussianBlur(image, (5, 5), 0)

circles = cv2.HoughCircles(image_blur, 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(image, (x, y), r, (255, 0, 0), 2)

cv2.imshow('Circles', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

这是一个简单的例子,展示了如何使用cv2.HoughCircles()函数进行圆形形状的检测。你可以根据实际需求调整参数,以获得更好的检测效果。