HoughCircles(霍夫变换圆检测)

void HoughCircles( InputArray image, OutputArray circles,
                               int method, double dp, double minDist,
                               double param1 = 100, double param2 = 100,
                               int minRadius = 0, int maxRadius = 0 )
○image:输入图像:8-bit,灰度图
○circles:输出圆的结果。
○method:定义检测图像中圆的方法。目前唯一实现的方法是HOUGH_GRADIENT。
○dp:寻找圆弧圆心的累计分辨率,这个参数允许创建一个比输入图像分辨率低的累加器。(这样做是因为有理由认为图像中存在的圆会自然降低到与图像宽高相同数量的范畴)。如果dp设置为1,则分辨率是相同的;如果设置为更大的值(比如2),累加器的分辨率受此影响会变小(此情况下为一半)。dp的值不能比1小。
○minDist:该参数是让算法能明显区分的两个不同圆之间的最小距离。
○param1 :用于Canny的边缘阀值上限,下限被置为上限的一半。
○param2:HOUGH_GRADIENT方法的累加器阈值。阈值越小,检测到的圈子越多。
○minRadius :最小圆半径。
○maxRadius:最大圆半径。
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main() {
    Mat src = imread("C:/Users/Administrator/Desktop/ic_houghcircle.jpg");//引入源图像
    if (src.empty()) {
        return -1;
    }
    imshow("src", src);//显示源图像
    Mat mout;
    medianBlur(src,mout,7);//中值滤波降噪
    cvtColor(mout,mout,CV_BGR2GRAY);//转换为灰度图像
    vector<Vec3f> circles;//存储圆的容器
    HoughCircles(mout,circles,HOUGH_GRADIENT,1,10,100,30,5,25);//进行霍夫圆检测
    Scalar circleColor = Scalar(255,0,0);//圆形的边缘颜色
    Scalar centerColor = Scalar(0, 0, 255);//圆心的颜色
    for (int i = 0; i < circles.size(); i++) {
        Vec3f c = circles[i];
        circle(src, Point(c[0], c[1]),c[2], circleColor, 2, LINE_AA);//画边缘
        circle(src, Point(c[0], c[1]), 2, centerColor, 2, LINE_AA);//画圆心
    }
    imshow("dst", src);//显示处理后的图像
    waitKey(0);
    return 0;
}
 
posted @   MoonXu  阅读(218)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
历史上的今天:
2020-03-18 模板笔记7 字符串作为模板参数(特别注意)
2020-03-18 模板笔记6 零初始化
2020-03-18 模板笔记5 模板的模板参数
2019-03-18 binutils安装
2019-03-18 汇编错误
点击右上角即可分享
微信分享提示