【opencv学习】【hough圆检测】

import cv2
import numpy as np

# 圆的检测原理
# 霍夫梯度法:先确定圆心,再确定半径
# 把原图做一次 Canny 边缘检测,得到边缘检测的二值图。
# 圆的边缘点切线的垂直方向,也就是梯度方向过圆点,所以我们可以遍历图像的所有点,
# 对每个像素点计算梯度,比如Sobel算子,对该直线上的所有像素点进行投票,
# 最后选取超过阈值的某个像素点,为了避免选取过多的圆心,
# 可以把一个像素点周围相差不大的像素点看做成一个圆心,确定圆心后再计算以改点为圆心的最佳半径
# 该方法优点:速度快
# 缺点:圆心可能会有偏差,这个方法对噪声比较敏感,所以可以先做中值滤波,做完之后再用hough圆变换

# 总体流程:
# 1.加载一幅图像
# 2.执行高斯模糊以降低噪声:GaussianBlur
# 3.转成灰度图:cvtColor
# 4.执行霍夫圆变换:HoughCircles

# HoughCircles 函数参数解析

# image,输入图像,即源图像,需要为 8 位的灰度单通道图像。
# method,使用的检测方法,目前 OpenCV 中就霍夫梯度法一种可以使用,标识符为 HOUGH_GRADIENT。
# dp,累加面分辨率(大小) = 原始图像分辨率(大小) × 1/dp。默认 dp = 1 时,两者分辨率相同。
# minDist,两个圆心之间的最小距离。若两圆心距离 < minDist,则认为是同一个圆。
# param1,Canny 边缘检测的高阈值,低阈值被自动置为高阈值的一半,默认为 100。
# param2,累加平面某点是否是圆心的判定阈值。它越大,能通过检测的圆就更接近完美的圆形,默认为 100。
# minRadius,圆半径的最小值。默认为 0。
# maxRadius,圆半径的最大值,默认为 0。

# 展示图像,封装成函数
def cv_show_image(name, img):
    cv2.imshow(name, img)
    cv2.waitKey(0)  # 等待时间,单位是毫秒,0代表任意键终止
    cv2.destroyAllWindows()

def detect_circle_demo(image):
    # 第一步:先进行滤波,去除噪声点
    # dst = cv.bilateralFilter(image, 0, 150, 5)  #高斯双边模糊,不太好调节,霍夫噪声敏感,所以要先消除噪声
    # cv.imshow("1",dst)
    # dst = cv.pyrMeanShiftFiltering(image,5,100)  #均值迁移,EPT边缘保留滤波,霍夫噪声敏感,所以要先消除噪声
    # cv.imshow("2", dst)
    dst = cv2.GaussianBlur(image, (13, 15), 15)  # 使用高斯模糊,修改卷积核ksize也可以检测出来
    # cv.imshow("3", dst)

    # 第二步:转成灰度图
    gray = cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY)
    # ret, gray = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY)
    cv_show_image('gray', gray)

    # 第三步:进行圆检测
    circles = cv2.HoughCircles(image=gray, method=cv2.HOUGH_GRADIENT, dp=1, minDist=20,
                               param1=50, param2=30, minRadius=0, maxRadius=0)
    circles = np.uint16(np.around(circles))  # around对数据四舍五入,为整数
    for i in circles[0, :]:
        cv2.circle(image, (i[0], i[1]), i[2], (0, 0, 255), 2)  # 圆轮廓
        cv2.circle(image, (i[0], i[1]), 2, (255, 0, 0), 2)  # 圆心

    cv2.imshow("detect_circle_demo", image)


src = cv2.imread("images/circle1.png")  # 读取图片

# cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE)  # 创建GUI窗口,形式为自适应
# cv2.imshow("input image", src)  # 通过名字将图像和窗口联系

detect_circle_demo(src)

cv2.waitKey(0)  # 等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv2.destroyAllWindows()  # 销毁所有窗口

效果图:
请添加图片描述

请添加图片描述

参与评论 您还未登录,请先 登录 后发表或查看评论
相关推荐
软件功能编辑 几何画板是适用于数学、平面几何、物理的矢量分析、作图,函数作图的动态几何工具。 《几何画板》软件是由美国Key Curriculum Press公司制作并出版的优秀教育软件,1996年该公司授权在中国发行该软件的中文版。正如其名“21世纪动态几何”,它能够动态地展现出几何对象的位置关系、运行变化规律,是数学与物理教师制作课件的“利剑”! 窗口 由题标栏、菜单栏、工具栏、状态栏、绘图窗口和记录窗口等组成。 工具栏 工具栏依次是选择工具(实现选择,及对象的平移、旋转、缩放功能)、画点工具、画线工具、画工具、文本工具和对象信息工具。在选择工具和画线工具按钮上按住鼠标左键停留片刻,会弹出更多的类型工具;选择对象的方法可以选择点按、按Shift点按或拖动等方式选中对象。 关系 几何画板中对象之间的关系如同生活中父母与子女关系。如果改变“父母”的位置或大小,为了保持与父母的几何关系,作为“子女”对象也随之变化。例如,我们先作出两个点,再作线段,那么作出的线段就是那两个点的“子女”。又如,先作一个几何对象,再基于这个对象用某种几何关系(平行、垂直等)或变换(旋转、平移等)作出另一个对象,那么后面作出的几何图形就是前面的“子女”。 信息工具 选择“信息工具”,然后在某个对象上单击或双击,即可显示有关信息或弹出该对象信息对话框。 基本操作编辑 点 例1 画三角形 先画三个点(可按住Shift键连续画点);然后利用“构造”菜单中的“线段”命令画出三角形。 注:用按住Shift键的方法,最大的好处是三个顶点都被选中。 例2 画多边形 先画多个点(可按住Shift键连续画点);然后利用“构造”菜单中的“线段”命令(或直接按CtrL+L)画出多边形。 注:选取顶点的顺序是十分重要的,不同的顺序会得出不同的多边形。 用几何画板画出的轨迹 用几何画板画出的轨迹 线 “画线工具”有三种线段、直线和射线,选中后在绘图窗口中进行画图即。 例3 制作验证三角形的三边的垂直平分线相交于一点的课件(初步进行作图练习) 有3种方法 用画工具作;通过两点作;用心与半径画(这种方法作的定长不变,除非改变定长时,否则半径不变) 弧 画弧也有3种方法 按一定顺序选定三点然后作弧(按逆时针方向从起点到终点画弧);选取上2点作弧(从第一点逆时针方向到第二点之间的一段弧);选取上三点作弧(与法2相似,只是无需选中,作完弧后,可以隐藏原来的,可见新作的弧) 扇形和弓形 与三角形内部相似(先选中三个顶点),扇形和弓形含有“面”,而不仅仅只有“边界”。扇形和弓形的画法类似: 用上述方法作弧,选择该弧,用“作图”菜单中的“扇形内部”(或“弓形内部”)命令作出扇形或弓形(阴影部分)。 度量及计算 [度量] 选中三角形内部后,在“度量”菜单中“面积”和“周长”命令,度量三角形面积与周长。利用“显示”菜单中“参数选择”命令,可以进行“对象参数”设置。 [计算] “度量”菜单的“计算”命令可以对对象的值进行运算,求得所需要的结果,我们以“相交弦定理”验证为例进行说明。 ①画一个及两条相交的弦;②度量出四条线段的长度(距离);③分别选择同一直线上的两条线段的距离值,利用“度量”菜单中的计算命令,依次计算出两者之积④拖动动点,观察规律:相交弦定理。 制表 [制表] 在“度量”菜单中“制表”命令。选择上例中“四条线段的长度”,利用“制表”命令,制出表格。变化图形,增加表格项的方法有3种:选中表格菜单中“加项”命令;选中表格利用CtrL+E快捷键;双击表格。 变换 “变换”包括平移、旋转、缩放、反射等命令。各标记命令允许指定决定变换的几何对象、几何关系,或度量值。也可以通过组合平移、旋转、缩放、反射等变换定义自己的变换。 标记中心和标记镜面命令确定了几何变换的类型。旋转和缩放需要一个中心点,所以在实施这两种变换前要先确定一个中心点。同样,反射需要一个镜面,在反射前要先确定一个镜面。 标签 所谓标签,也就是给作出的点、线、弧等几何图形起个名字。用几何画板作出的几何对象,一般都由系统自动配置好标签。利用“标签”工具双击标签文本可以进行重命名操作。 提高操作编辑 快速绘制 ①利用快捷键 如绘制多边形时,可先利用画点工具,画若干个点(顶点)。画点时按住Shift键,使之均处于选中状态,然后利用作线段快捷键命令CtrL+L,来快速完成多边形的绘制。 ②直接使用键盘命令创建图形对象 其实《几何画板》中提供了通过键盘命令(几个标点符号键)直接输入几何图形的方法。 句号( 。 ) —— 绘制点 逗号( , ) —— 绘制 斜杠( / ) —— 绘制线(包括线段、射线和直线,它们各类型之间可通过重复点击来切换) 分号( ;) —— 绘制弧 撇号( ’)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

星海千寻

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值