这些笔记的最初,我是以接近于源码分析的形式来梳理自己学习OpenCV的过程。

然而写下来,一是执行力,二是时间的问题,确实越写越马虎了。用我老师的话:观其大略了。

但是,暂时就这么写着吧。


在笔记《十七》中,我们简单地谈到了霍夫变换检测直线的原理,就是判断相邻像素点的值(x, y)对应的r-theta曲线是否能够相交,如果有足够多的相邻的像素点的曲线相交,我们就认为这些相邻的像素点构成一条直线。

圆圈亦然,只是把直线的方程替换成了圆的方程。除了极坐标的r,多了两个变量:Xcenter和Ycenter

r就是像素所在的圆圈的半径,X-center和Y-center就是这个圆圈的圆心。

如果若干相邻的像素,他们对应的r、X-center、Y-center能够相交,就说明它们位于同一个圆圈的曲线上。

在OpenCV中,我们在使用霍夫变换检测之前,一般先对图像进行高斯平滑,去除噪声。

OpenCV中是这样定义HoughCircles函数的:

void HoughCircles(InputArray image, OutputArray circles, int method, double dp, double minDist, doubleparam1=100, double param2=100, int minRadius=0, int maxRadius=0 )

image需要8位单通道的灰度图像

circles一般为vector<Vec3f>

method一般为CV_HOUGH_GRADIENT

dp是输入图像和处理图像的比值,如果为1,则两者相同;如果为2,则处理的图像是输入图像的一半大小。

minDist是检测到的圆圈之间,它们的圆心的最小距离。

param1是传入canny()函数的higher threshold。默认lower threshold为higher threshold的一半。

param2暂时不了解。看示例代码吧。

OpenCV中关于HoughCircles的例子:

 1     void HoughDetection(const Mat& src_gray, const Mat& src_display, int cannyThreshold, int accumulatorThreshold)
 2     {
 3         // will hold the results of the detection
 4         std::vector<Vec3f> circles;
 5         // runs the actual detection
 6         HoughCircles( src_gray, circles, CV_HOUGH_GRADIENT, 1, src_gray.rows/8, cannyThreshold, accumulatorThreshold, 0, 0 );
 7
 8         // clone the colour, input image for displaying purposes
 9         Mat display = src_display.clone();
10         for( size_t i = 0; i < circles.size(); i++ )
11         {
12             Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
13             int radius = cvRound(circles[i][2]);
14             // circle center
15             circle( display, center, 3, Scalar(0,255,0), -1, 8, 0 );
16             // circle outline
17             circle( display, center, radius, Scalar(0,0,255), 3, 8, 0 );
18         }
19
20         // shows the results
21         imshow( windowName, display);
22     }
23 }

转载于:https://www.cnblogs.com/nipan/p/4170482.html

OpenCV笔记(十八)——使用霍夫变换检测圆圈相关推荐

  1. OpenCV(十八)霍夫变换(直线、线段与圆检测)

    目录 一.基础理论 1.作用: 2.定义 3.原理 二.直线检测 1.基础理论 1.原理 2.过程 2.HoughLines函数(直线检测) 3.HoughLinesP函数(线段检测) 三.圆检测 1 ...

  2. Opencv笔记(十八)——轮廓的更多函数及其层次结构

    凸缺陷 前面我们已经学习了轮廓的凸包,对象上的任何凹陷都被成为凸缺陷.OpenCV 中有一个函数 cv.convexityDefect() 可以帮助我们找到凸缺陷.函数调用如下: hull = cv2 ...

  3. arduino学习笔记十八--红外遥控检测

    介绍 远程遥控技术又称为遥控技术,是指实现对被控目标的遥远控制,在工业控制.航空航天.家电领域应用广泛.红外遥控是一种无线.非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著 ...

  4. windows内核开发学习笔记十八:IRP 处理的标准模式

    windows内核开发学习笔记十八:IRP 处理的标准模式 在 Windows 内核中的请求基本上是通过 I/O Request Packet 完成的. I/O manager ---> Dis ...

  5. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置...

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置 Download JetBrains Python IDE :: PyCharm http://ww ...

  6. Polyworks脚本开发学习笔记(十八)-用SDK开发Polyworks插件

    Polyworks脚本开发学习笔记(十八)-用SDK开发Polyworks插件 插件是由PolyWorks加载的动态链接库(DLL文件),然后查询Polyworks模块,以确定它们具有哪些功能,提供给 ...

  7. STM32复习笔记(十八) —— 高级定时器(输出比较)

    STM32复习笔记(十八) -- 高级定时器(输出比较) 1.配置步骤 1)选择计数器时钟 (内部,外部,预分频器) 2)将相应的数据写入TIMx_ARR and TIMx_CCRx寄存器中 3)可设 ...

  8. opencv学习十六:圆检测

    圆检测 原理 圆周上任意三点所确定的圆,经Hough变换后在三维参数空间应对应一点.遍历圆周上所有点,任意三个点所确定的候选圆进行投票.遍历结束后,得票数最高点(理论上圆周上任意三点确定的圆在Houg ...

  9. OpenCV图像处理学习十八,霍夫变换实现交通车道线检测

    一.霍夫变换 经典霍夫变换用来检测图像中的直线,后来霍夫变换经过扩展可以进行任意形状物体的识别,例如圆和椭圆.霍夫变换运用两个坐标空间之间的变换,将在一个空间中具有相同形状的曲线或直线映射到另一个坐标 ...

最新文章

  1. 简单文件的上传与保存
  2. android activity横竖屏切换,Activity重新创建问题解决!
  3. Chrome浏览器兼容性 检测工具 (chrome插件)
  4. 第十一期:数据挖掘其实就是为了干这四种事?
  5. php函数积累第二弹(关于文件操作)
  6. 用系统工具sxstrace检查缺少的VC运行时组件
  7. 【JAVA】学习java 运行环境配置
  8. DIADEM_metric不能运行及解决办法
  9. 第八章 云计算原理与技术
  10. 元宵节快乐 | 谈心
  11. 计算机输入法在桌面显示不出来的,电脑开机无法正常显示桌面只能看到输入法如何解决...
  12. Java Class
  13. github中clone代码到本地与直接下载压缩包的区别
  14. openwrt 遍译php_OpenWrt CI 在线集成编译环境使用教程
  15. linux中进程与cpu核的绑定
  16. 软工网络15个人阅读作业2(201521123007谭燕)
  17. 软件测试周刊(第73期):每个人都有一个觉醒期,但觉醒的早晚决定个人的命运。
  18. kali 2021安装w3af
  19. 20170204老男孩用过的一些运维软件
  20. 使用Zend Debugger + Zend Studio 调试web

热门文章

  1. html列自动变高,HTML_CSS三行三列DIV高度自适应的设置,用脚本控制三行三列div高度自 - phpStudy...
  2. bearer token_四,接口认证方式:Bearer Token
  3. matlab实验符号计算答案,2014秋实验四_MATLAB的符号计算二答案
  4. win10计算机怎么拨号上网,win10拨号连接怎么创建 win10宽带拨号连接如何设置
  5. [Intellij] Project Structure 配置说明
  6. 批量查进程linux,linux 批量删除进程与查看进程详解
  7. python画圣诞树_python画圣诞树
  8. r语言的rmd文件转换成html,.Rmd文件转化为PDF报告
  9. igzo屏幕优点与缺点_手机贴膜怎么选?选对了可以省个屏幕钱
  10. 7z001怎么解压在安卓手机上面_安卓手机怎么设置网易企业邮箱