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

用Python的cv2HoughCircles()函数生成圆形检测器

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

cv2的HoughCircles()函数是用来在图像中检测圆形的工具,它使用霍夫变换的方法来寻找圆形的边缘。该函数需要输入一张灰度图像,并返回检测到的圆形的信息。

下面是一个使用cv2的HoughCircles()函数检测圆形的示例:

import cv2
import numpy as np

# 读取图像
img = cv2.imread('circle.jpg', cv2.IMREAD_GRAYSCALE)

# 使用中值滤波对图像进行预处理
img = cv2.medianBlur(img, 5)

# 使用cv2.HoughCircles函数检测圆形
circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 20,
                           param1=50, param2=30, minRadius=0, maxRadius=0)

# 如果检测到了圆形
if circles is not None:
    # 将检测到的圆形信息转换为整数
    circles = np.uint16(np.around(circles))

    # 遍历每一个检测到的圆形
    for circle in circles[0, :]:
        # 获取圆形的坐标和半径
        x, y, r = circle[0], circle[1], circle[2]

        # 在原始图像上绘制圆形
        cv2.circle(img, (x, y), r, (0, 255, 0), 3)
        # 在圆心位置绘制一个小圆点
        cv2.circle(img, (x, y), 2, (0, 0, 255), 3)

    # 显示处理结果
    cv2.imshow('Circles', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
else:
    print('No circles detected.')

在这个示例中,首先我们读取一张灰度图像,然后使用cv2.medianBlur()函数对图像进行中值滤波预处理。接下来,我们调用cv2.HoughCircles()函数来检测图像中的圆形。

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

- 个参数是输入图像,需要是一个灰度图像。

- 第二个参数是使用的霍夫变换方法,这里使用的是cv2.HOUGH_GRADIENT,表示霍夫梯度法。

- 第三个参数是圆形的累加器分辨率,一般设置为1。

- 第四个参数是两个圆心之间的最小距离。

- param1和param2是用于Canny边缘检测的阈值。

- minRadius和maxRadius分别是检测到的圆形的最小和最大半径。

如果检测到了圆形,则将检测到的圆形信息转换为整数,并遍历每一个圆形。然后,在原始图像上使用cv2.circle()函数绘制检测到的圆形,圆心绘制一个小圆点。最后,通过cv2.imshow()函数显示处理结果,并使用cv2.waitKey()等待用户按下键盘上的任意键关闭窗口。

如果没有检测到圆形,则打印出"No circles detected."的提示消息。

以上就是使用cv2的HoughCircles()函数生成圆形检测器的例子。你可以根据自己的需求调整参数来适应不同的图像。cv2的HoughCircles()函数是一个非常实用的工具,可以用于物体识别、计量分析等应用中。