霍夫圆变换的基本原理
霍夫梯度法的原理
霍夫梯度法的缺点
霍夫圆变换:HoughCircles()函数
代码
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/video.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
//1.载入原图, Mat变量定义
Mat srcImage = imread("my.jpg");
Mat midImage, dstImage;
//2.显示原始图
imshow("原始图", srcImage);
//3.转为灰度图并进行图像平滑
cvtColor(srcImage, midImage, COLOR_BGR2GRAY);//转化边缘检测后的图为灰度图
GaussianBlur(midImage, midImage, Size(9, 9), 2, 2);
//4.进行霍夫圆变换
vector<Vec3f> circles;
HoughCircles(midImage, circles, HOUGH_GRADIENT, 1.5, 10, 200, 100, 0, 0);
//5.依次在途中绘制出圆
for (size_t i = 0; i < circles.size(); i++)
{
//参数定义
Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
//绘制圆心
circle(srcImage, center, 3, Scalar(0, 255, 0), -1, 8, 0);
//绘制圆轮廓
circle(srcImage, center, radius, Scalar(155, 20, 255), 3, 8, 0);
}
//6.显示效果图
imshow("效果图", srcImage);
waitKey(0);
return 0;
}
效果