opencv c++ 霍夫圆检测
1、原理
a)对某点,以其为圆心的圆为无数(一圈圈的圆),将其从x-y平面坐标系上转换到r-θ极坐标系上后,则变成了以r、θ为自变量,为固定值,x、y为因变量的式子:
b)其余点作同样操作,可以得到,当半径r为某值时,使得三个圆同时交于1点,从而获取这些点构成的圆的圆心,半径。
圆的参数方程:
注:在实际实现时,会设定一个固定的半径r来进行检测(因为r的范围太大了)。
2、API
void cv::HoughCircles ( InputArray image,OutputArray circles,int method,double dp,double minDist,double param1 = 100,double param2 = 100,int minRadius = 0,int maxRadius = 0 )
image ——输入的灰度图像。
circles——输出,数据类型为vector (x,y,radius) or (x,y,radius,votes) .
method ——检测方法
dp ——累加器分辨率与图像分辨率的反比. For example, if dp=1 , the accumulator has the same resolution as the input image. If dp=2 , the accumulator has half as big width and height. For HOUGH_GRADIENT_ALT the recommended value is dp=1.5, unless some small very circles need to be detected.
minDist ——两个被检测圆的圆心的最小距离,即在这个距离范围内,不会出现第二个被检测出的圆。 If the parameter is too small, multiple neighbor circles may be falsely detected in addition to a true one. If it is too large, some circles may be missed.
param1 ——Canny边缘检测的高阈值。
param2 ——累计阈值,当相交于同一点的圆的个数大于它时,才记录这个被识别到的圆。
minRadius——圆的最小半径
maxRadius ——圆的最大半径。If <= 0, uses the maximum image dimension. If < 0, HOUGH_GRADIENT returns centers without finding the radius. HOUGH_GRADIENT_ALT always computes circle radiuses.
3、代码:
说明:HoughCircles 会基于canny自动二值化图,因此输入灰度图即可,但由于该算法对图像噪点敏感,必须在调用前对灰度图进行降噪处理。
void QuickDemo::hough_circle(Mat& image)
{//霍夫圆检测会基于canny自动二值化图,因此输入灰度图即可,但在传入之前,需要对图像进行降噪。Mat gray, binary;cvtColor(image, gray, COLOR_BGR2GRAY);GaussianBlur(gray, gray, Size(9, 9), 2, 2);namedWindow("hough gray", WINDOW_FREERATIO);imshow("hough gray", gray);vector<Vec3f> circles;double mindist = 2;double min_r = 10;double max_r = 200;HoughCircles(gray, circles, HOUGH_GRADIENT, 1.5, mindist, 100, 100, min_r, max_r);for (size_t i = 0; i < circles.size(); ++i) {circle(image, Point(circles[i][0], circles[i][1]), circles[i][2], Scalar(0, 255, 0), 3, 8);circle(image, Point(circles[i][0], circles[i][1]), 10, Scalar(250, 0, 0), -1, 8);}namedWindow("hough circle", WINDOW_FREERATIO);imshow("hough circle", image);}
opencv c++ 霍夫圆检测相关推荐
- OpenCV中霍夫圆检测
OpenCV中霍夫圆检测 在直线检测中,变换后在r−θr-\thetar−θ空间内曲线交点,然后根据阈值来得到直线.在圆中需要有三个变量圆心坐标和半径,因此变换后的空间在三维空间,根据三维空间中的曲线 ...
- Opencv 霍夫变换 霍夫圆检测
霍夫变换是一种特征提取术,在了解霍夫变换 霍夫检测之前 需要首先明白什么是霍夫空间:以圆形举例子,弄明白形状的原理,直线的变换与检测也就不难理解 霍夫空间,是一种三维空间,三个坐标分别为圆的横纵坐标, ...
- OpenCV 霍夫圆检测
圆的表示式是: 其中aa和bb表示圆心坐标,rr表示圆半径,因此标准的霍夫圆检测就是在这三个参数组成的三维空间累加器上进行圆形检测,此时效率就会很低,所以OpenCV中使用霍夫梯度法进行圆形的检测. ...
- OpenCV基于Python霍夫圆检测—基于梯度的霍夫圆检测
基于梯度的霍夫圆检测 1. 回顾与目标 2. 基于梯度的霍夫圆检测 2.1 问题分析 2.2 基于梯度的霍夫圆检测步骤 3. 基于梯度的霍夫圆检测函数HoughCircles 3.1 函数HoughC ...
- OpenCV基于Python霍夫圆检测—标准霍夫圆检测
标准霍夫圆检测 1. 简介 2. 标准霍夫圆检测 2.1 情形一 2.2 情形二 2.3 情形三 3. 程序演示 4. 结尾 参考资料 1. 简介 1972年,R. D. Duda和P. E. Har ...
- OpenCV_09 模版匹配和霍夫变换:霍夫线检测+霍夫圆检测
1 模板匹配 1.1 原理 所谓的模板匹配,就是在给定的图片中查找和模板最相似的区域,该算法的输入包括模板和图片,整个任务的思路就是按照滑窗的思路不断的移动模板图片,计算其与图像中对应区域的匹配度,最 ...
- 霍夫圆检测(HoughCircles)
霍夫圆检测 1.霍夫圆检测 从平面坐标到极坐标需要转换三个参数,C(x0,y0,r)C(x_0,y_0,r)C(x0,y0,r),其中(x0,y0)(x_0,y_0)(x0,y0)为圆心. 假 ...
- 使用Python测试霍夫圆检测
目录 1. 目的 2. 霍夫园检测的原理 3. 使用opencv测试 1. 目的 记录使用python学写霍夫圆检测的过程 2. 霍夫园检测的原理 略!别怪我,这个涉及到数学原理.有时间我再进行补充, ...
- OpenCV标准霍夫直线检测详解
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转载自:OpenCV学堂 霍夫直线检测 对于图像来说可以从笛卡 ...
最新文章
- OKR 怎么突然火起来了?
- 【涛声依旧】华为的“大服务”
- 计算机应用主要学PS,全国计算机一级Photoshop应用试题及答案
- normalize.css
- Push rejected: Push to origin/master was rejected
- mysql dump gtid_mysqldump命令详解 Part 3- 备份全库
- 墨刀原型制作 位置选择_原型制作不再是可选的
- Ubuntu 12.04 wine QQ
- 23 CO配置-控制-产品成本控制-成本对象控制-检查定单类型
- 图片服务 - thumbor安装
- 《Redis开发与运维》读书笔记
- service worker使用
- 统计学习方法 第二章 感知机
- Python图片格式转换,图片压缩
- 学习UI设计,哪些软件是必学的
- Linux Update
- charles安卓手机抓包
- 稳定好看的Linux桌面,漂亮的桌面 哪一种Ubuntu官方版本最适合你?
- 【开发教程12】AI语音人脸识别(会议记录仪/人脸打卡机)-语音采集
- 产品思维训练 | 李佳琦双十一直播,10秒卖出8万件,直播间购物靠谱吗?
热门文章
- vectorvn1610报价_Vector VN1610 CAN NETWORK INTERFACE
- Kesion cms 路径泄露漏洞
- 董藩:北京房价可以涨到每平米80万===如此高论,岂不保存下来,且待25年后再看...
- DZ论坛附件大小限制问题
- 【申报通知】关于组织开展广东省2022年高新技术企业认定工作的通知
- 无符号数在计算机中怎么存储,计算机中数的存储
- 织梦不同栏目不同Banner
- Android P 按键音分析
- Real6410移植linux-2.6.39.1记录(2)-LCD驱动移植
- 计算机ps2级证书英语,全国计算机等级PHOTOSHOP一级证书