Hough变换检测圆
霍夫变换也可以用于检测其他几何形体,事实上,可以用参数方程表示的几何体都可以尝试用霍夫变换进行检测。
比如圆形,它对应的参数方程为:r2=(x-x0)2+(y-y0)2
该函数包含三个参数,分别是圆心的坐标和圆的半径,这意味着需要三维的累加器。
OpenCV中实现的霍夫圆检测算法通常是两个步骤:
1. 二维累加器用于寻找可能为圆的位置。由于在圆周上的点的梯度应该指向半径的方向,因此对于每一个点,只有沿着梯度方向的项才得到增加(需要预先设定最大和最小的半径);
2. 若找到了圆心,则构建一维的半径的直方图,这个直方图的峰值对应的是检测到的圆的半径。
OpenCV中的霍夫变换圆检测函数 cv::HoughCircles:
它整合了Canny检测和霍夫变换,输出是cv::Vec3f向量,每个元素包含检测圆的圆心坐标和半径(cx, cy, radius)。
另外,在进行霍夫变换之前,先对操作图像进行平滑,以减少可能引起误检测的噪声点。
#include "opencv2/highgui.hpp"
#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
class CircleFinder{
private:
std::vector<cv::Vec3f> circles;
double dp; // 累加器的分