You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cv2.HoughCircles检测小圆时误识别为环形图案的问题咨询

OpenCV HoughCircles小圆检测调整方案

参考示例图

  • 预处理后图片:预处理后示例图片
  • 原始图片:原始图片

检测失效核心原因

  • 未限制检测半径范围,算法默认优先匹配像素占比更高的环形大轮廓
  • param1设置为300远高于灰度最大值255,Canny边缘检测环节失效,无法提取小圆边缘
  • param2阈值设置过高,小圆的边缘投票数达不到阈值被过滤
  • 第二次高斯模糊处理过度平滑了图像,小圆边缘特征被削弱,环形连续边缘特征被强化

具体调整方案

  1. 修正边缘检测阈值:param1调整为80~120区间,保证Canny边缘检测正常生效
  2. 降低累加器阈值:param2调整为15~30区间,适配小圆低投票特征
  3. 固定半径检测范围:根据目标小圆实际尺寸设置minRadius和maxRadius,示例图中小圆半径约为2~8像素,可设置为minRadius=2、maxRadius=8,避免匹配大环形
  4. 调整最小圆心距:将minDist从5调整为10,避免相邻小圆被误合并
  5. 优化预处理流程:移除第二次高斯模糊操作,避免小圆边缘被过度平滑

调整后参考代码

import cv2 as cv

def circle_detection(frame):
    # 反转图像
    frame = 255 - frame
    # 高斯模糊降噪
    frame = cv.GaussianBlur(frame, (3,3), cv.BORDER_REFLECT)
    # 阈值分割去噪
    ret, frame = cv.threshold(frame, 130, 255, cv.THRESH_OTSU)
    
    # 调整霍夫圆检测参数
    circles = cv.HoughCircles(
        frame,
        cv.HOUGH_GRADIENT,
        dp=1,
        minDist=10,
        param1=100,
        param2=20,
        minRadius=2,
        maxRadius=8
    )
    return circles, frame

额外优化建议

如果调整参数后仍存在环形误检,可优先做连通域分析,过滤掉面积远大于单个小圆的连通域后再执行霍夫圆检测;也可以改用cv.findContours做轮廓检测,通过圆形度(轮廓面积与周长平方的比值)筛选小圆,对小尺寸圆形的检测稳定性优于霍夫变换。

内容的提问来源于stack exchange,提问作者Zara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:27:02