【OpenCV-Python】教程:3-14 Hough 圆变换

news2024/11/16 19:53:41

OpenCV Python Hough 圆变换

【目标】

  • 学习用 Hough 变换检测圆
  • cv2.HoughCircles()

【理论】

圆的数学表达式是

( x − x c e n t e r ) 2 + ( y − y c e n t e r ) 2 = r 2 (x-x_{center})^2 + (y-y_{center})^2 = r^2 (xxcenter)2+(yycenter)2=r2

其中 ( x c e n t e r , y c e n t e r ) (x_{center}, y_{center}) (xcenter,ycenter)是圆心, r r r是半径。从方程中我们可以看出有3个参数,所以我们需要一个用于 Hough 变换的3D累加器,这将是非常不奏效的,所以,OpenCV用了一个比较 tricker 的方法,Hough Gradient Method利用了边缘梯度信息。

【代码】

在这里插入图片描述

import numpy as np 
import cv2 

img = cv2.imread("assets/opencv-logo.png", 0)
img = cv2.medianBlur(img, 5)
img_color = cv2.imread("assets/opencv-logo.png", 1)

circles = cv2.HoughCircles(img, method=cv2.HOUGH_GRADIENT, dp=1.2, minDist=3,
                        param1=150, param2=50, minRadius=30, maxRadius=400)
circles = np.uint16(np.around(circles))

for i in circles[0, :]:
    # draw the outer circle
    cv2.circle(img_color, (i[0], i[1]), i[2], (0, 255, 0), 2)
    # draw the center of the circle
    cv2.circle(img_color, (i[0], i[1]), 2, (0, 0, 255), 3)

cv2.imshow("detected circles", img_color)
cv2.waitKey(0)
cv2.destroyAllWindows()

【接口】

  • HoughCircles()
cv2.HoughCircles(	image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]]	) ->	circles

Hough 变换在灰度图像上找圆;
通常检测圆心较好,但是半径不是很精确,可以辅助设置 minRadiusmaxRadius . HOUGH_GRADIENT方法,可以将 maxRadius 设置为负数,这样只会查找圆心,而不会查找半径,查找半径可以用其他的方法。GaussianBlue()7*7的核,1.5 * 1.5sigma,可以使得效果更好一些。

  • image: 单通道8位灰度图像
  • circles: 返回的圆的数组(vector/list),元组结构 ( x , y , r a d i u s , v o t e s ) (x, y, radius, votes) (x,y,radius,votes)
  • method: 检测方法,有四种:HOUGH_GRADIENT, HOUGH_STANDARD, HOUGH_PROBABILISTIC, HOUGH_MULTI_SCALE
  • dp: 变换比例系数,累加器分辨率与图像分辨率的反比。如果dp=1,则累加器具有与输入图像相同的分辨率。如果dp=2,蓄能器的宽度和高度为其一半。对于 HOUGH_GRADIENT_ALT ,建议值为dp=1.5,除非需要检测一些非常小的圆。
  • minDist: 最小距离,圆心之间最小的距离,如果参数非常小,多个相邻的圆会被多检出,如果设置的很大,则会漏掉一些圆。
  • param1: 第一个与方法相关的参数,在 HOUGH_GRADIENTHOUGH_GRIDIENT_ALT 的情况下,它是传递到 Canny 边缘检测器的两个阈值中的较高阈值(较低的阈值小两倍)。请注意, HOUGH_GRADIENT_ALT 使用 Scharr 算法来计算图像梯度,因此阈值通常应该更高。
  • param2: 第二个与方法相关的参数,在 HOUGH_GRADIENT 的情况下,它是检测圆心的累加器阈值,越小可能呢检测到的假圆越多。首先返回与较大累加器值相对应的圆。在 HOUGH_GRADIENT_ALT 情况下,它是圆的“完美度”度量,它越接近于1,算法选择的圆越好,在大多数情况下,0.9应该是好的,如果想要更好地检测小圆,可以将其降低到0.85、0.8或更低。也要尝试限制搜索范围[minRadius, maxRadius],避免许多假圆。
  • minRadius: 最小半径
  • maxRadius: 最大半径,If <= 0, 用最大的图像维度,If < 0, HOUGH_GRADIENT: 只返回圆心不返回半径. HOUGH_GRADIENT_ALT: 总是返回半径和圆心.

【参考】

  1. OpenCV官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/56378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计志愿者服务平台Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

matlab测量计算信号的相似度

本示例说明如何测量信号相似度。最近我们被客户要求撰写关于计算信号的相似度的研究报告&#xff0c;包括一些图形和统计输出。 将回答以下问题&#xff1a;如何比较具有不同长度或不同采样率的信号&#xff1f;如何确定测量中是否存在信号或仅有噪声&#xff1f;有两个信号…

校园论坛(Java)—— 考研学习模块

校园论坛&#xff08;Java&#xff09;—— 考研学习模块 文章目录校园论坛&#xff08;Java&#xff09;—— 考研学习模块1、写在前面2、系统结构设计2.1 各个页面之间的调用关系2.2. 登录注册模块各层的设计3、考研学习模块设计3.1 浏览和查看帖子3.2 发表帖子3.3 删除帖子3…

GJB 5000B二级-CM配置管理

主要变化情况 继承3条、修订3条 一、修订的主要内容 CM2.2 建立并维护配置管理系统(SP1.2:建立配置管理系统). 实践陈述:建立并维护配置管理系统和管理规程,建立多级控制机制,实现对已标识配置项的存储、检索、访问控制、变更控制、备份和恢复; CM2.4:跟踪和控制变更…

数据结构-难点突破(C++实现图的基本操作(邻接矩阵,邻接表,十字链表法储存代码))

关于图的数据结构&#xff0c;我曾经自己学过一部分&#xff0c;图论专栏&#xff0c;但是学习本就是重复的过程&#xff0c;这里打算系统的学习一下图。第一步当然是图的储存和基本操作的实现。 要用C实现图的基本操作 Adjacent(x&#xff0c;y)&#xff1a;判断图是否存在边…

[附源码]Python计算机毕业设计Django健康医疗体检

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

[附源码]计算机毕业设计JAVA校园闲置物品交易

[附源码]计算机毕业设计JAVA校园闲置物品交易 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

第十五章 如何编写README文档

README 文档对于开源项目的重要性甚至会超过代码本身。你试想一下&#xff0c;你打开一个 Github 项目&#xff0c;第一时间就会看到 README 文档&#xff0c;而这时候同一类的项目你可能有很多选择&#xff0c;如果这个README不正规&#xff0c;无法快速上手&#xff0c;你可能…

4.springboot中整合Mybatis

Springboot整合mybatis 在 SpringSpringMVC 中整合 MyBatis 步骤需要在配置文件里配置多个 Bean&#xff0c;比如MapperScannerConfigurer&#xff0c;SqlSessionFactoryBean 等&#xff0c;步骤还是比较复杂的&#xff0c;Spring Boot 中对此做了进一步的简化&#xff0c;使 …

GIS工具maptalks开发手册(三)03——官网示例之添加图层和移除图层

GIS工具maptalks开发手册(三)03——官网示例之添加图层和移除图层 效果 代码 index.html <!DOCTYPE html> <html> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1"> <ti…

Android系统启动流程

Android系统完整的启动过程&#xff0c;从系统层次角度可分为 Linux 系统层、Android 系统服务层、Zygote进程模型三个阶段&#xff1b;从开机到启动 Home Launcher 完成具体的任务细节可分为七个步骤&#xff0c;下面就从具体的细节来解读 Android 系统完整的初始化过程。 Lo…

java计算机毕业设计基于springboot电商项目(附源码讲解)

目录 1. 用户端 1.1 主页&#xff08;未登录时可以查看商品但是不可以购买&#xff09; 1.2 登录&#xff08;账号密码登录) 1.3 登录&#xff08;手机验证码登录&#xff09; 1.4 注册 1.5 查看商品详情 1.6 将商品加入购物车 1.7 在商品购物车中选中商品购买 1.8 …

Jenkins用户权限配置 (三)

平时开发会分为测试环境、生产环境&#xff0c;多个开发人员需要区分不同的权限。例如普通开发人员只能看到测试视图和发布测试环境&#xff0c;生产环境的发布则由负责把控的人员进行统一发布&#xff0c;所以需要在新建用户的同时也分配好权限 (一) 安装Role-based Authoriz…

基于C#的公交充值管理系统的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做C#程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问题…

利用SCRM进行精细化社群运营

有很多企业凭借私域模式获得爆发式的流量增长&#xff0c;但流量转化仍旧是个问题&#xff0c;因此企业在获得流量的同时&#xff0c;还要守住流量&#xff0c;进行精细化运营才行。 前言 近年来&#xff0c;私域、社群、裂变的模式已成为各行各业进行营销的主旋律&#xff0c…

【Matplotlib绘制图像大全】(八):Matplotlib使用text()添加文字标注

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

[附源码]计算机毕业设计招聘系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

GIS工具maptalks开发手册(三)02——层级缩放工具

GIS工具maptalks开发手册(三)02——层级缩放工具 效果-层级缩放工具 代码 index.html <!DOCTYPE html> <html><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1"><title>…

[附源码]Python计算机毕业设计SSM抗新冠肺炎药品进销存管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]计算机毕业设计疫情防控管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…