OpenCV检测圆(Python版本)

文章目录

示例代码

python 复制代码
import cv2
import numpy as np

# 加载图像
image_path = 'DistanceComparison/test_image/1.png'
image = cv2.imread(image_path, cv2.IMREAD_COLOR)

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

# 使用高斯模糊消除噪声
# gray_blurred = cv2.GaussianBlur(gray, (9, 9), 2)

# 应用霍夫变换进行圆检测
circles = cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT, dp=1, minDist=40, param1=40, param2=3,  minRadius=12, maxRadius=20)

# 如果找到了圆,输出圆的信息
if circles is not None:
    circles = np.uint16(np.around(circles))
    for i in circles[0, :]:
        # 绘制圆心
        cv2.circle(image, (i[0], i[1]), 1, (0, 100, 100), 3)
        # 绘制圆轮廓
        cv2.circle(image, (i[0], i[1]), i[2], (255, 0, 255), 2)

cv2.imwrite("DistanceComparison/out_image/1.png", image)

示例结果


图1:检测到的圆(粉色表示)

调参

如果你没有得到预期的结果,你可以尝试调整一些参数来优化圆的检测。以下是一些常用的参数和调整方法:

  1. param1和param2:这两个参数是Canny边缘检测的阈值。增加param1可以减少检测到的圆的数量,增加param2可以过滤掉较弱的圆。你可以尝试不同的值来找到适合你图像的阈值。

  2. minRadius和maxRadius:这两个参数用于指定允许检测到的圆的最小和最大半径。如果你知道圆的大致大小范围,可以设置这两个参数来限制检测的范围。

  3. dp参数:这个参数是霍夫梯度法的累加器分辨率与图像分辨率的反比。较小的值可以提高检测的精度,但可能会增加计算时间。较大的值可以加快计算速度,但可能会降低检测的精度。你可以尝试不同的值来平衡速度和精度。

  4. 图像预处理:在进行Hough变换之前,你可以尝试进行一些图像预处理操作,例如调整对比度、直方图均衡化、图像增强等,以提高圆的检测效果。

  5. 图像尺寸:如果图像尺寸过大,可以考虑将图像缩小到适当的尺寸,以加快计算速度。

尝试调整这些参数,并根据你的具体图像和需求进行优化。记住,在调整参数时,可以通过显示中间结果来观察效果,例如显示Canny边缘检测结果、显示霍夫累加器等。这样可以帮助你更好地理解参数对结果的影响,并进行调整。

相关推荐
冬奇Lab10 分钟前
开源项目第241期:YuE2 —— 用符号乐谱当“白盒“接口的开源音乐生成模型,SongBench 超越 Suno v5/v6
人工智能
鶴哥只手遮天1 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天1 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天1 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天1 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天1 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天2 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源
鶴哥只手遮天2 小时前
Spring AI 2.0.1 深度解析-第 03 章 消息体系与 Prompt:不可变模型、`ChatOptions` 与模板渲染
java·人工智能·开源
鶴哥只手遮天2 小时前
Spring AI 2.0.1 深度解析-第 24 章 生产实践与 2.x 迁移:陷阱清单、AOT 与调优
java·人工智能·开源
鶴哥只手遮天2 小时前
Spring AI 2.0.1 深度解析-第 10 章 工具调用(中):执行链路、结果转换与工具限制
java·人工智能·开源