open cv霍夫变换-圆形检测

一看就懂的霍夫直线检测与圆检测原理
https://blog.csdn.net/shenziheng1/article/details/75307410
一个圆最重要的信息是圆心坐标XY和半径距离

从平面坐标到极坐标转换3个参数C(x0,y0,r)其中x0 ,y0 是圆心 r是半径

假设平面坐标的任意一个圆上的点,转换到极坐标中:
C(x0,y0,r)处有最大值,霍夫变换正是利用这个原理实现圆的检测


霍夫圆检测先检测边缘,将非边缘处都变为零值。遍历所有非零值,
将其投影为(a,b,r)空间的一个圆,笛卡尔坐标中同一个圆上的所有点
投影到(a,b,r)空间将交于一点,这一点为笛卡尔坐标中这个圆的圆心。
(a,b,r)中空间中每一个点有一个累加器,有一条线经过该点,累加器
加1,根据阈值(大于某一个阈值)找到所有可能的圆心。
(x− a)2+(y− b)2 = r2
(a− xo)2 +(b− yo)2 = r2


因为霍夫圆检测对噪声比较敏感,所以首先要对图像做中值滤波
基于效率考虑,opencv中实现的霍夫圆检测是基于图像梯度的实现
分为两步:
(1)检测边缘,发现可能的圆心
(2)基于第一步的基础上从候选圆心开始计算最佳半径大小


相关API cv::HoughCircles

HoughCircles(
InputArray image,//输入图像,必须是8位的单通道灰度图像
OutputArray circles,//输出结果,发现的圆信息,为三元向量组,存储每个可能的圆心坐标和半径信息(a,b,r)
int method,//方法-HOUGH_GRADIENT,求梯度,得到可能的边缘值,其余为零值
double dp,//取dp = 1,代表在原图的尺度下寻找,0.5为在原图的一半尺度上寻找(dpi寻找半径大小)
double mindist,//最短距离可以分辨相隔距离较近的多个圆心是两个圆还是同心圆
double param1,//canny edge detection low threshold 圆检测判断低阈值
double param2,//中心点累加器阈值,候选圆心 通常为30~50
int minradius,//最小半径 范围越大

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>
#include <math.h>

using namespace cv;
using namespace std;

Mat src, dst, mblur;
int kksize = 1;
int dp = 1;
int mindist = 30;
int thlow = 100;
int thcp = 15;
int minr = 2;
int maxr = 20;
int Max =
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值