一. 霍夫圆检测

  因为霍夫圆检测对噪声比较敏感,所以首先要对图像做中值滤波。

  基于效率考虑,OpenCV中实现的霍夫变换圆检测是基于图像梯度的实现,分为两步:

  1. 检测边缘,发现可能的圆心

  2. 在第一步的基础上从候选圆心开始计算最佳半径大小。

二. 霍夫圆检测API

cv::HoughCircles()API分析

cv::HoughCircles(
    InputArray image,   //输入图像,必须是8位的单通道灰度图像
    OutputArray circles,    //圆信息
    Int method,             //方法
    Double dp,              //dp = 1,尺度,在原图上查找为1,
    Double mindist,     //两个圆心相聚的最小距离可以认为是两个圆
    Double param1,      //Canny边缘检测的高阈值
    Double param2,      //中心点累加阈值-候选圆心
    Int minradius,          //最小半径
    Int maxradius,          //最大半径
)

三. 霍夫圆检测应用代码:

/*****霍夫圆变换*****/

#include<iostream>
#include<opencv2/opencv.hpp>
#include<string>
#include<vector>
using namespace std;

string in_title = "input image";
string ou_title = "output image";

int main() {
    cv::Mat src, dst, gray_src;
    src = cv::imread("检测圆.png");
    cv::namedWindow(in_title, cv::WINDOW_NORMAL);
    cv::imshow(in_title, src);

    //中值滤波
    cv::Mat m_output;
    cv::medianBlur(src, m_output, 3);
    cv::cvtColor(m_output, m_output, cv::COLOR_BGR2GRAY);

    //霍夫圆检测
    //圆的圆心和半径
    vector<cv::Vec3f> p_circles;
    cv::HoughCircles(m_output, p_circles, cv::HOUGH_GRADIENT, 1,
        3, 100, 25, 5, 50);
    src.copyTo(dst);
    //画出圆
    for (size_t i = 0; i < p_circles.size(); ++i) {
        cv::Vec3f cc = p_circles[i];
        cv::circle(dst, cv::Point(cc[0], cc[1]), cc[2], cv::Scalar(0, 0, 255),
            2, cv::LINE_AA);
        cv::circle(dst, cv::Point(cc[0], cc[1]), 2, cv::Scalar(0, 0, 255),
            2, cv::LINE_AA);
    }

    cv::namedWindow(ou_title, cv::WINDOW_NORMAL);
    cv::imshow(ou_title, dst);

    cv::waitKey(0);
    return 0;

}

点进来,关注我 开发小鸽 看更多CV,深度学习,编程学习笔记,更有海量源码等你来拿!!!

让我们一起学习,一起进步!!!

OpenCV学习笔记​zhuanlan.zhihu.com
25c6c61a0d2336f632b0e782719a9321.png
机器学习笔记​zhuanlan.zhihu.com
25c6c61a0d2336f632b0e782719a9321.png
C++学习笔记​zhuanlan.zhihu.com
25c6c61a0d2336f632b0e782719a9321.png
深度学习笔记​zhuanlan.zhihu.com
25c6c61a0d2336f632b0e782719a9321.png
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐