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

用Python的cv2HoughCircles()函数进行圆形检测

发布时间:2023-12-11 16:51:38

cv2.HoughCircles()函数是OpenCV中用于圆形检测的函数之一。该函数通过使用霍夫变换来检测图像中的圆形,并返回检测到的圆形的圆心坐标和半径。

下面是使用cv2.HoughCircles()函数进行圆形检测的示例代码:

import cv2
import numpy as np

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

# 使用中值滤波平滑图像
image = cv2.medianBlur(image, 5)

# 调整图像的亮度和对比度
image = cv2.addWeighted(image, 1.5, np.zeros(image.shape, image.dtype), 0, -100)

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

# 将检测到的圆形结果进行整数化
circles = np.uint16(np.around(circles))

# 在图像中绘制圆形
for i in circles[0, :]:
    # 绘制外圆
    cv2.circle(image, (i[0], i[1]), i[2], (0, 255, 0), 2)
    # 绘制圆心
    cv2.circle(image, (i[0], i[1]), 2, (0, 0, 255), 3)

# 显示结果图像
cv2.imshow('Circle detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在以上代码中,首先通过cv2.imread()函数读取了一张包含圆形的图像,并将其转换为灰度图像。然后使用cv2.medianBlur()函数对图像进行中值滤波,以平滑图像并减少噪声。接着通过cv2.addWeighted()函数调整图像的亮度和对比度,以增强图像中的圆形轮廓。

然后通过调用cv2.HoughCircles()函数进行圆形检测。该函数的参数包括输入图像、检测方法、图像分辨率的倒数、两个圆之间的最小距离、Canny边缘检测的两个阈值以及检测到的圆形的最小半径和最大半径。函数返回的结果是一个三维数组,其中每个元素分别表示一个检测到的圆形的圆心坐标和半径。

最后,通过循环遍历检测到的圆形,并使用cv2.circle()函数在图像中绘制检测结果。绘制外圆时使用绿色线条,绘制圆心时使用红色点。

最后,通过cv2.imshow()函数显示圆形检测结果,并通过cv2.waitKey()函数等待用户按下任意键退出程序。