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