【检测圆心的方法】

圆心是它所在圆周所有法线的交汇处,因此只要找到这个交点,即可确定圆心,该方法所用的霍夫空间与图像空间的性质相同,因此它仅仅是二维空间。检测圆半径的方法是从圆心到圆周上的任意一点的距离相同,首先确定一个阈值,只要计算得到相同距离的数量大于该阈值,就认为该距离就是该圆心所对应的圆半径,并且该方法只需要计算半径直方图,不使用霍夫空间。圆心和圆半径都得到后,就能确定圆形了。

【霍夫变换优化】

实践证明,霍夫圆变换只能检测一些简单情形下的圆形,并且检测不出椭圆,由于之前做一个项目需要用到圆形检测(可能不是标准的圆),所以想出了一个基于轮廓的圆形检测方法。

HoughCircles函数可以利用霍夫变换算法检测出灰度图中的圆。它和之前的HoughLines和HoughLinesP比较明显的一个区别是它不需要源图是二值的,而HoughLines和HoughLinesP都需要源图为二值图像。

circles = HoughCircles(InputArray image, OutputArray circles, int method, double dp, double minDist, double param1=100,double param2=100, int minRadius=0, int maxRadius=0)
  • 个参数,InputArray类型的image,输入图像,即源图像,需为8位的灰度单通道图像。
  • 个参数,InputArray类型的circles,经过调用HoughCircles函数后此参数存储了检测到的圆的输出矢量,每个矢量由包含了3个元素的浮点矢量(x, y, radius)表示。
  • 个参数,int类型的method,即使用的检测方法,目前OpenCV中就霍夫梯度法一种可以使用,它的标识符为CV_HOUGH_GRADIENT,在此参数处填这个标识符即可。
  • 个参数,double类型的dp,用来检测圆心的累加器图像的分辨率于输入图像之比的倒数,且此参数允许创建一个比输入图像分辨率低的累加器。上述文字不好理解的话,来看例子吧。例如,如果dp= 1时,累加器和输入图像具有相同的分辨率。如果dp=2,累加器便有输入图像一半那么大的宽度和高度。
  • 个参数,double类型的minDist,为霍夫变换检测到的圆的圆心之间的最小距离,即让我们的算法能明显区分的两个不同圆之间的最小距离。这个参数如果太小的话,多个相邻的圆可能被错误地检测成了一个重合的圆。反之,这个参数设置太大的话,某些圆就不能被检测出来了。
  • 个参数,double类型的param1,有默认值100。它是第三个参数method设置的检测方法的对应的参数。对当前唯一的方法霍夫梯度法CV_HOUGH_GRADIENT,它表示传递给canny边缘检测算子的高阈值,而低阈值为高阈值的一半。
  • 个参数,double类型的param2,也有默认值100。它是第三个参数method设置的检测方法的对应的参数。对当前唯一的方法霍夫梯度法CV_HOUGH_GRADIENT,它表示在检测阶段圆心的累加器阈值。它越小的话,就可以检测到更多根本不存在的圆,而它越大的话,能通过检测的圆就更加接近完美的圆形了。
  • 个参数,int类型的minRadius,有默认值0,表示圆半径的最小值。
  • 个参数,int类型的maxRadius,也有默认值0,表示圆半径的最大值。
//c++【4】进行霍夫圆变换vector<Vec3f> circles;HoughCircles( midImage, circles, CV_HOUGH_GRADIENT,1.5, 10, 200, 100, 0, 0 );//【5】依次在图中绘制出圆for( size_t i = 0; i < circles.size(); i++ ){Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));int radius = cvRound(circles[i][2]);//绘制圆心circle( srcImage, center, 3, Scalar(0,255,0), -1, 8, 0 );//绘制圆轮廓circle( srcImage, center, radius, Scalar(155,50,255), 3, 8, 0 );}

需要注意的是,使用此函数可以很容易地检测出圆的圆心,但是它可能找不到合适的圆半径。我们可以通过第八个参数minRadius和第九个参数maxRadius指定最小和最大的圆半径,来辅助圆检测的效果。或者,我们可以直接忽略返回半径,因为它们都有着默认值0,单单用HoughCircles函数检测出来的圆心,然后用额外的一些步骤来进一步确定半径。

cvCircle(CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int lineType=8, int shift=0)

img为源图像指针
center为画圆的圆心坐标
radius为圆的半径
color为设定圆的颜色,规则根据B(蓝)G(绿)R(红)
thickness 如果是正数,表示组成圆的线条的粗细程度。否则,表示圆是否被填充
line_type 线条的类型。默认是8
shift 圆心坐标点和半径值的小数点位数

https://blog.csdn.net/gdut2015go/article/details/46430699

Python四:HoughCircles()霍夫变换相关推荐

  1. 硬核!Python 四种变量的代码对象和反汇编分析

    作者 | 大奎 整理 | 阳哥 来源丨Python数据之道 在Python基础的学习过程中,对变量和参数的理解有助于我们从更基础层面了解Python语言的运行.在这个过程中,还是有不少冷门和细节的地方 ...

  2. python中long类型_浅谈python 四种数值类型(int,long,float,complex)

    Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下. 数字数据 ...

  3. python数字类型floatcomplexint_浅谈python 四种数值类型(int,long,float,complex)

    Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下. 数字数据 ...

  4. python excel 数据分析统计服_数据分析从入门到进阶(透彻讲解EXCEL.SQL.TABLEAU、PYTHON四项数据分析必会工具.免费提供1GB数据集...

    透彻讲解Excel.SQL.Tableau.Python四项数据分析必会工具,数据分析工作者的案头推荐工具书.系统介绍数据分析的策略.方法(数据分析之道):实例讲解引导.快速掌握数据分析工具(数据分析 ...

  5. 盏茶python(四) 控制流

    目录 1.条件测试 1.1 比较运算 1.2 逻辑运算 1.3 存在运算 2.分支结构 2.1 单分支 2.2 二分支 2.3 多分支 3.遍历循环 3.1 基本结构 3.2 循环控制 3.3 与el ...

  6. Python傅里叶变换与霍夫变换

    目录 傅里叶变换概述 霍夫变换概述 代码实现及效果展示 傅里叶变换概述 傅里叶变换(简称FT),常用于数字信号处理,它的目的是将时间域上的信号转变为频率域上的信号.傅里叶定理指出"任何连续的 ...

  7. python 四种逐行读取文件内容的方法

    目录 方法一:readline函数 方法二:一次读取多行数据 方法三:直接for循环 方法四:使用fileinput模块 下面是四种Python逐行读取文件内容的方法, 并分析了各种方法的优缺点及应用 ...

  8. day25 Python四个可以实现自省的函数,反射

    python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) ...

  9. Python四种形式模块的形式与调用

    一.什么是模块? 模块是一系列功能的集合体,而函数是某一个功能的集合体,因此模块可以看成是一堆函数的集合体.一个py文件内部就可以放一堆函数,因此一个py文件就可以看成一个模块.如果这个py文件的文件 ...

最新文章

  1. 山西电大统考英语和计算机试题,2017年电大统考计算机试题及答案.doc
  2. AlphaGo背后的力量:蒙特卡洛树搜索入门指南
  3. wordpress url index.php,WordPress对URL的路由解析过程详解
  4. api postmain 鉴权_WebAPI常见的鉴权方法,及其适用范围
  5. 20164301 Exp3 免杀原理与实践
  6. maven项目pom.xml中parent标签的使用
  7. C# Attribute(中)——Attribute本质论
  8. C#实现图(Graph)
  9. MySQL学习记录 (五) ----- 存储函数、存储过程和触发器
  10. weblogic 解决线程阻塞
  11. [Study] 通过游戏学编程的网站
  12. python合并多个excel工作簿_将多个excel文件合并到一个excel的多个sheet
  13. 远程操作Linux图形界面
  14. 怎么用c语言编写画图软件,大佬们,小菜鸟想问一问用vc编译器做简易画图软件...
  15. Android studio新手:实现最新版QQ登陆界面
  16. Java 敏感词过滤(DFA有穷自动机)
  17. CodeLab:Android fundamentals 01.3:Text and scrolling views
  18. 留学回国后混的很惨是一种怎样的体验?
  19. 用C#进行北斗串口编程之一:获取北斗卡号
  20. vue项目内存溢出,JavaScript heap out of memory

热门文章

  1. Decrease (Judge ver.)
  2. 字符设备驱动程序之poll机制(韦大仙)
  3. IOS 控制器View的创建方式(方式的优先级 、view的延迟加载)
  4. position:absolute的小坑
  5. 用JS实现的常见几种排序算法
  6. 【python】Python的基本数据类型之运算符
  7. 【Linux】Linux的常用远程工具
  8. Web前后端交互总结
  9. 黑盒测试策略及测试范围
  10. gt designer2不能初始化字体管理器_Windows Terminal 1.1预览版发布:新增字体粗细、随开机启动等功能...