zoukankan      html  css  js  c++  java
  • 霍夫圆检测 opencv

      进行霍夫圆变换中有一个API:HoughCircles()。

      第五个参数为double类型的minDist(),为霍夫变换检测到的圆的圆心之间的最小距离,即让算法能明显区分的两个不同圆之间的最小距离。这个参数如果设置太小,多个相邻的圆可能被错误的检测成了一个重合的圆。反之,如果设置太大,某些圆就不能检测出来。

      第七个参数,它越小,就越可以检测到更多根本不存在的圆,而它越大的话,能通过检测的圆就更加接近完美的圆形了。

     1 #include<opencv2/opencv.hpp>
     2 
     3 using namespace std;
     4 using namespace cv;
     5 
     6 int  main()
     7 {
     8     Mat src = imread("D:/yuan.jpg");//读取原图
     9 
    10     Mat mid, dst;//mat类型的中间变量和目标图像
    11 
    12     dst = src.clone();//原图像深拷贝到目标图像
    13 
    14     cvtColor(dst, mid, COLOR_BGR2GRAY); //转化为灰度图像
    15     GaussianBlur(mid, mid, Size(9, 9), 2, 2); //高斯滤波
    16 
    17     //进行霍夫圆变换
    18     vector<Vec3f>circles;
    19     HoughCircles(mid, circles, HOUGH_GRADIENT, 1.5, 35, 200, 150, 0, 0);
    20     //依次在图中绘制出圆
    21     for (size_t i = 0; i < circles.size(); i++)
    22     {    
    23         //找出圆心和半径
    24         Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
    25         int radius = cvRound(circles[i][2]);
    26          //绘制圆心和半径
    27         circle(dst, center, 3, Scalar(0, 255, 0), -1, 8, 0);
    28         circle(dst, center, radius, Scalar(155, 50, 255), 3, 8, 0);
    29 
    30     }
    31     //显示原图
    32     namedWindow("原图", CV_WINDOW_AUTOSIZE);
    33     imshow("原图", src);
    34     //显示效果图
    35     namedWindow("效果图", CV_WINDOW_AUTOSIZE);
    36     imshow("效果图",dst);
    37     imwrite("D:/learn-opencv/houghcircles.jpg", dst);
    38     waitKey(0);
    39     return 0;
    40 
    41 }

    原图:

    效果图:

  • 相关阅读:
    9、 vector与list的区别与应用?怎么找某vector或者list的倒数第二个元素
    8、STL的两级空间配置器
    hdoj--1342--Lotto(dfs)
    FZU--2188--过河(bfs暴力条件判断)
    zzuli--1812--sort(模拟水题)
    hdoj--3123--GCC(技巧阶乘取余)
    zzulioj--1089--make pair(dfs+模拟)
    zzulioj--1815--easy problem(暴力加技巧)
    zzulioj--1801--xue姐的小动物(水题)
    HIToj--1076--Ordered Fractions(水题)
  • 原文地址:https://www.cnblogs.com/carlber/p/9706420.html
Copyright © 2011-2022 走看看