核心步骤:中值滤波去噪声
hough圆检测原理:
https://blog.csdn.net/zhazhiqiang/article/details/51097439
因为霍夫圆检测对噪声比较敏感,所以首先要对图像做中值滤
波。
基于效率考虑,Opencv中实现的霍夫变换圆检测是基于图像梯度的实现,分为两步:1. 检测边缘,发现可能的圆心
2. 基于第一步的基础上从候选圆心开始计算最佳半径大小
API:
HoughCircles( InputArray image, // 输入图像 ,必须是8位的单通道灰度图像
OutputArray circles, // 输出结果,发现的圆信息 (x, y, radius)
Int method, // 方法 CV_HOUGH_GRADIENT
Double dp, // dp = 1; 用来检测圆心的累加器图像的分辨率于输入图像之比的倒数,
//且此参数允许创建一个比输入图像分辨率低的累加器。
//例如,如果dp= 1时,累加器和输入图像具有相同的分辨率。
//如果dp=2,累加器便有输入图像一半那么大的宽度和高度。
Double mindist, // 10 最短距离-可以分辨是两个圆的,否则认为是同心圆。
//这个参数如果太小的话,多个相邻的圆可能被错误地检测成了一个重合的圆。
//反之,这个参数设置太大的话,某些圆就不能被检测出来了。
Double param1, // 它表示传递给canny边缘检测算子的高阈值,而低阈值为高阈值的一半。
Double param2, //中心点累加器阈值 – 候选圆心。
//它越小的话,就可以检测到更多根本不存在的圆,
//而它越大的话,能通过检测的圆就更加接近完美的圆形了。
Int minradius, // 最小半径
Int maxradius//最大半径 )