本文主要是介绍opencv-Hough 圆环变换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Hough 圆环变换(Hough Circle Transform)是一种用于在图像中检测圆环的技术。与 Hough 直线变换类似,它通过在参数空间中表示图像中的圆环,将圆环检测问题转换为参数空间的累加问题。OpenCV 提供了 cv2.HoughCircles()
函数来执行 Hough 圆环变换。
cv2.HoughCircles()
circles = cv2.HoughCircles(image, method, dp, minDist, param1, param2, minRadius=0, maxRadius=0)
参数说明:
image
: 输入的灰度图像。method
: 圆环检测的方法。目前 OpenCV 中只支持cv2.HOUGH_GRADIENT
,表示使用基于梯度的检测方法。dp
: 累加器分辨率与图像分辨率的倒数比。如果设置为1,累加器的分辨率与图像分辨率相同;如果大于1,累加器的分辨率小于图像分辨率。minDist
: 检测到的圆之间的最小距离。param1
: Canny 边缘检测的高阈值。param2
: 圆心累加器的阈值。只有当某个圆的累加值高于该阈值时,该圆才会被检测到。minRadius
: 检测的圆的最小半径。maxRadius
: 检测的圆的最大半径。
返回值:
circles
: 检测到的圆的参数。每行表示一个检测到的圆,包括圆心的坐标和半径。
以下是一个简单的示例,演示如何使用 Hough 圆环变换检测图像中的圆环:
import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像并转换为灰度
img = cv2.imread( r"C:\Users\mzd\Desktop\opencv\3.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 高斯模糊
blurred = cv2.GaussianBlur(gray, (9, 9), 2)# 执行 Hough 圆环变换
circles = cv2.HoughCircles(blurred, cv2.HOUGH_GRADIENT, dp=1, minDist=50, param1=50, param2=30, minRadius=10, maxRadius=100)# 将检测到的圆心坐标和半径转换为整数
circles = np.uint16(np.around(circles))# 在原图上绘制检测到的圆环
for i in circles[0, :]:cv2.circle(img, (i[0], i[1]), i[2], (0, 255, 0), 2) # 绘制圆环cv2.circle(img, (i[0], i[1]), 2, (0, 0, 255), 3) # 绘制圆心# 显示原图和检测到的圆环
plt.figure(figsize=(10, 5))plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title('Original Image with Circles'), plt.axis('off')plt.subplot(122), plt.imshow(blurred, cmap='gray')
plt.title('Blurred Image'), plt.axis('off')plt.show()
在这个示例中,我们首先读取了一幅图像,将其转换为灰度图像,然后对图像进行高斯模糊。接着,使用 cv2.HoughCircles()
函数进行 Hough 圆环变换,并在原图上绘制检测到的圆环。最后,通过 Matplotlib 显示原图和模糊图像。
这篇关于opencv-Hough 圆环变换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!