• 19 OpenCV 霍夫曼变换检测圆


    cv::HoughCircles

    因为霍夫圆检测对噪声比较敏感,所以首先要对图像做中值滤波。 基于效率考虑,Opencv中实现的霍夫变换圆检测是基于图像梯度的实现,分为两步:

    1. 检测边缘,发现可能的圆心
    2. 基于第一步的基础上从候选圆心开始计算最佳半径大小

    算子参数

    HoughCircles(
    InputArray image, // 输入图像 ,必须是8位的单通道灰度图像
    OutputArray circles, // 输出结果,发现的圆信息
    Int method, // 方法 - HOUGH_GRADIENT
    Double dp, // dp = 1; 
    Double mindist, // 10 最短距离-可以分辨是两个圆的,否则认为是同心圆- src_gray.rows/8
    Double param1, // canny edge detection low threshold
    Double param2, // 中心点累加器阈值 – 候选圆心
    Int minradius, // 最小半径
    Int maxradius//最大半径 
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    示例

    #include 
    #include 
    using namespace std;
    using namespace cv;
    
    Mat src, src_gray, dst;
    
    const char* output_title = "final image";
    int main()
    {
    	src = imread("test.png");//读取图片
    	if (src.empty())
    	{
    		cout << "could not load img...";
    		return -1;
    	}
    	namedWindow(output_title);//设置窗口名称
    	imshow("test", src);
    
    	// 中值滤波
    	Mat moutput;
    	medianBlur(src, moutput, 3);
    	cvtColor(moutput, moutput, COLOR_BGR2GRAY);
    
    	// 霍夫圆检测
    	vector<Vec3f> pcircles;
    
    	HoughCircles(moutput, pcircles, HOUGH_GRADIENT, 1, 10, 100, 30, 5, 50);
    	src.copyTo(dst);
    	for (size_t i = 0; i < pcircles.size(); i++) 
    	{
    		Vec3f cc = pcircles[i];
    		circle(dst, Point(cc[0], cc[1]), cc[2], Scalar(0, 0, 255), 2, LINE_AA);//绘制圆心
    		circle(dst, Point(cc[0], cc[1]), 2, Scalar(198, 23, 155), 2, LINE_AA);
    	}
    
    	imshow(output_title, dst);
    	waitKey(0);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    在这里插入图片描述

  • 相关阅读:
    SpringClouldAlibaba 之 Sentinel流控规则同步到nacos(并重新生成镜像)
    php 提取word 的内容 必须是docx格式
    base_network
    C语言动态实现顺序栈
    软件开发工具总结篇
    Jupyter 介绍
    css实现圆角三角形,圆角三角形的实现
    解构 赋值
    RISC-V与RISC Zero zkVM的关系
    select......for update会锁表还是锁行?
  • 原文地址:https://blog.csdn.net/weixin_45672157/article/details/136750043