OpenCV中霍夫圆检测
OpenCV中霍夫圆检测
在直线检测中,变换后在r−θr-\thetar−θ空间内曲线交点,然后根据阈值来得到直线。在圆中需要有三个变量圆心坐标和半径,因此变换后的空间在三维空间,根据三维空间中的曲线的交点得到圆。这就是标准的霍夫圆变换。但这个变换涉及到计算量过于巨大,所以很难实际应用。
在实际应用中常用的是:霍夫梯度法\color{#f00}霍夫梯度法霍夫梯度法。算法的原理:圆心一定在圆上每个点的模向量上,这些圆上的点的模向量的交点就是圆心,霍夫梯度法的第一步便是找到这些圆心,第二部根据所有候选中心的的边缘非零像素对其的支持程度来确定半径。
感觉太墨迹了,说说个人理解,不一定正确,希望看到的大佬多多指正。霍夫梯度算法:先做边缘检测,然后利用边缘像素的点模向量相交,发现可能的圆心,然后再根据有多少个边缘像素的模向量交于圆心,从而得到最佳的半径。
API:
HoughCircles(输入图像,8位单通道vector<Vec3f>变量,发现圆的信息(x,y,r)int method(CV_HOUGH_GRADIENT)dp,用来检测圆心的累加器图像的分辨率与输入图像之比的导数,如dp=2,累加器有输入图像一半的宽度和高度。mindist 最短距离-可以分辨是两个圆的,否则认为时同心圆。太小相邻的检测成一个重合的圆,太大,有些就检测不出来了。param1 传递给Canny的高阈值,低的为高阈值的一半。param2 中心累加器阈值-候选圆心,越小检测到更多根本不存在的圆,越大能通过检测的圆更加接近完美的圆形。int 最小半径inti 最大半径
);
下面是一个小的demo
#include "opencv2/opencv.hpp"using namespace cv;
using namespace std;int main(int argc, char *argv[])
{Mat src,dst,temp;RNG rng((unsigned int)time(NULL));src = Mat::zeros(500,500,CV_8UC3);for(int i = 0;i < 5;i++)circle(src,Point(rng.uniform(100,400),rng.uniform(100,400)),rng.uniform(1,100),Scalar(255,255,255),-1);imshow("src",src);cvtColor(src,temp,CV_RGB2GRAY);GaussianBlur(temp,dst,Size(9,9),2,2);vector<Vec3f> circles;HoughCircles(dst,circles,CV_HOUGH_GRADIENT,1,30,200,50,0,0);cout << circles.size() << endl;for(size_t i = 0;i < circles.size();i++){cout << cvRound(circles[i][0]) << "," << cvRound(circles[i][1]) << endl;Point center(cvRound(circles[i][0]),cvRound(circles[i][1]));int radius = cvRound(circles[i][2]);circle(src,center,3,Scalar(0,255,0),-1);circle(src,center,radius,Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255)),3,8,0);}imshow("back",src);waitKey(0);return 0;
}
OpenCV中霍夫圆检测相关推荐
- Opencv 霍夫变换 霍夫圆检测
霍夫变换是一种特征提取术,在了解霍夫变换 霍夫检测之前 需要首先明白什么是霍夫空间:以圆形举例子,弄明白形状的原理,直线的变换与检测也就不难理解 霍夫空间,是一种三维空间,三个坐标分别为圆的横纵坐标, ...
- opencv c++ 霍夫圆检测
1.原理 a)对某点,以其为圆心的圆为无数(一圈圈的圆),将其从x-y平面坐标系上转换到r-θ极坐标系上后,则变成了以r.θ为自变量,为固定值,x.y为因变量的式子: b)其余点作同样操作,可以得到, ...
- 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)为圆心. 假 ...
- OpenCV标准霍夫直线检测详解
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转载自:OpenCV学堂 霍夫直线检测 对于图像来说可以从笛卡 ...
- OpenCV中霍夫直线变换
OpenCV中霍夫直线变换 首先要知道,一条直线的通用表达式为y=ax+b\color{#F00}y=ax+by=ax+b,a为直线的斜率,b为直线的截距,知道这两个参数可以唯一确定一条直线.通常我们 ...
最新文章
- 石墨文档Websocket百万长连接技术实践
- 【转】C# using的三种使用方法
- 【Kmeans】基于Kmeans的聚类算法的MATLAB仿真
- BZOJ1503[NOI2004]郁闷的出纳员——treap
- IntelliJ IDEA for Mac如何查看某个方法的实现
- mysql触发器可以使用正则表达式,是否可以使用正则表达式在MySQL中强制执行数据检查...
- java时间聚类_mongodb 按照时间聚类 java
- 蓝桥杯第三届省赛JAVA真题----取球博弈
- 2021款iPad Pro渲染图曝光:依旧采用双摄+激光雷达扫描仪
- java redis工具类_redis Java工具类详解
- idea多行编辑_开发神器idea被玩残了,你们功不可没啊!
- 常用Feed流架构实现
- 我与CSDN的2020年
- 高等数学问题的符号解
- Android增量升级方案
- Python轻松实现PDF格式转换(附详细源码)
- nginx的反向代理proxy_pass指令
- 阿里云ACP大数据工程师认证,ACP,阿里云ACP认证,阿里云认证,大数据工程师认证
- 华为芯片鸿蒙的由来,华为“鸿蒙”真的来了!看完这些商标来历,网友们又激动了...
- Android 无线 ADB 懒人打法:WiFiADB 调试