• OpenCV检测圆(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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    示例结果

    请添加图片描述

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

    调参

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

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

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

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

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

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

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

  • 相关阅读:
    【无标题】EXCEL实现刷题
    集合贴3——智能客服系统
    网络通信错误代码列表 HTTP 、FTP
    08. Java内存模型(JMM)
    【Linux学习笔记】基础命令1
    C++第四次实验
    LeetCode只出现一次的数字
    vue3的基本特性和底层原理
    跨端必须要掌握的uniapp(3),前端基础
    Flink双流join导致数据重复
  • 原文地址:https://blog.csdn.net/i13270752870/article/details/130587444