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

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

发布时间:2023-12-11 16:48:28

在Python中,我们可以使用OpenCV库的cv2.HoughCircles()函数来实现圆形形状的检测。该函数可以帮助我们在给定的图像中检测出圆形的对象。下面是一个简单的使用例子:

import cv2
import numpy as np

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

# 将图像转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用模糊滤波器去除噪声
blur = cv2.medianBlur(gray, 5)

# 使用HoughCircles函数来检测圆形对象
circles = cv2.HoughCircles(blur,
                           cv2.HOUGH_GRADIENT,
                           dp=1,
                           minDist=50,
                           param1=100,
                           param2=30,
                           minRadius=10,
                           maxRadius=100)

# 检测到的圆形数量
num_circles = 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, (0, 255, 0), 4)
        # 在圆心位置绘制一个小的圆形
        cv2.circle(image, (x, y), 2, (0, 255, 255), 3)
        num_circles += 1

# 显示带有检测到的圆形的图像
cv2.imshow("Circles", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 打印检测到的圆形数量
print("Number of circles detected: ", num_circles)

在上面的例子中,首先我们读取了一张图片,并将其转换为灰度图像。然后,我们使用模糊滤波器去除图像中的噪声。接下来,我们使用cv2.HoughCircles()函数来检测圆形对象。

该函数的参数包括:

- image:输入的灰度图像。

- method:指定使用的检测方法,这里我们使用了cv2.HOUGH_GRADIENT

- dp:累加器图像分辨率相对于输入图像的分辨率的倒数。

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

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

- param2:圆心检测阈值,值越小则检测到的圆形数量越多。

- minRadius:圆形的最小半径。

- maxRadius:圆形的最大半径。

如果检测到了圆形,则会将圆形的位置和半径提取出来,并在原始图像上绘制圆形区域和圆心。最后,将带有检测到的圆形的图像显示出来,并打印出检测到的圆形数量。

请注意,在使用cv2.HoughCircles()函数之前,我们对原始图像进行了一些预处理步骤,例如转换为灰度图像和去除噪声。这些预处理步骤有助于提高圆形检测的准确性。根据您的具体应用场景,您可能需要调整参数以获得 的检测结果。