霍夫圆检测 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 }

原图:

效果图:

原文地址:https://www.cnblogs.com/carlber/p/9706420.html

时间: 2024-11-05 14:59:31

霍夫圆检测 opencv的相关文章

opencv 检测图像线条 霍夫线检测

1 # Writer : [email protected] 2 3 # Data : 2020.3.21 4 5 import cv2 as cv 6 7 import numpy as np 8 9 img = cv.imread('../paojie.jpg') 10 11 gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY) 12 13 # 50,150 为二值化时的阈值 apertureSize为Sobel滤波器的大小 14 15 edges = cv.C

霍夫直线检测进行复杂环境的树干提取

霍夫直线检测进行复杂环境的树干提取 霍夫直线检测是常用的直线检测算法,原理比较简单. 我叙述一下我对霍夫直线检测算法的理解:将像素点在图像中的二维坐标,通过坐标变换转化为极坐标,然后通过比较每个点在极坐标下的角度值,如果角度值相同,则判定为同直线. 该算法有几个可调参数: C++: void HoughLinesP(InputArray image, OutputArray lines, double rho, double theta, int threshold, double minLin

霍夫直线检测算法进行树干提取

霍夫直线检测算法进行树干提取 霍夫直线检测是常用的直线检测算法,原理比较简单. 我叙述一下我对霍夫直线检测算法的理解:将像素点在图像中的二维坐标,通过坐标变换转化为极坐标,然后通过比较每个点在极坐标下的角度值,如果角度值相同,则判定为同直线. 该算法有几个可调参数: C++: void HoughLinesP(InputArray image, OutputArray lines, double rho, double theta, int threshold, double minLineLe

OpenCV——霍夫变换(直线检测、圆检测)

x 1 #include <opencv2/opencv.hpp> 2 #include <iostream> 3 #include <math.h> 4 5 using namespace cv; 6 using namespace std; 7 8 9 int main(int argc, char** argv) 10 { 11 Mat src, src_gray, dst; 12 src = imread("test1.jpg"); 13 1

学习 opencv---(13)opencv霍夫变换:霍夫线变换,霍夫圆变换

在本篇文章中,我们将一起学习opencv中霍夫变换相关的知识点,以及了解opencv中实现霍夫变换的HoughLines,HoughLinesP函数的使用方法,实现霍夫圆变换的HoughCircles函数的使用方法. 先尝鲜一下其中一个示例程序的运行截图: 一.引言 在图像处理和计算机视觉领域中,如何从当前的图像中提取所需要的特征信息是图像识别的关键所在.在许多应用场合中需要快速准确的检测出直线或者圆.其中一种非常有效的解决问题的方法是霍夫(Hough)变换,其为图像处理中从图像识别几何形状的基

20、【opencv入门】霍夫变换:霍夫线变换,霍夫圆变换合辑

一.引言 在图像处理和计算机视觉领域中,如何从当前的图像中提取所需要的特征信息是图像识别的关键所在.在许多应用场合中需要快速准确地检测出直线或者圆.其中一种非常有效的解决问题的方法是霍夫(Hough)变换,其为图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.最基本的霍夫变换是从黑白图像中检测直线(线段). 二.霍夫变换概述 霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状

opencv之霍夫曼变换

霍夫变换不仅可以找出图片中的直线,也可以找出圆,椭圆,三角形等等,只要你能定义出直线方程,圆形的方程等等. 不得不说,现在网上的各种博客质量真的不行,网上一堆文章,乱TM瞎写,误人子弟.本身自己就没有理解的很清楚,又不去读算法实现的源码,写的云山雾罩的,越看越懵逼. 霍夫变换本身的思路是很简明的.这篇文章我们就以霍夫直线变换说明算法的思想. 霍夫变换 思考一下,二维平面里我们怎么表达直线. 有两种表达方式: 直角坐标系(也叫笛卡尔坐标系) 极坐标系(也叫球坐标系) 第一种就是最常见的直角坐标系下

Python+OpenCV图像处理之圆检测

霍夫变换不仅可以用来检测直线,同样也可以用来检测圆 python实现 import cv2 import numpy as np __author__ = "boboa" def detect_circles_demo(image): dst = cv2.pyrMeanShiftFiltering(image, 10, 100) # 均值偏移滤波 cimage = cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY) circles = cv2.HoughCirc

opencv —— HoughLines、HoughLinesP 霍夫线变换(标准霍夫线变换、多尺度霍夫线变换、累积概率霍夫线变换)

霍夫线变换的原理 一条直线在图像二维空间可由两个变量表示,有以下两种情况: ① 在笛卡尔坐标系中:可由参数斜率和截距(k,b)表示. ② 在极坐标系中:可由参数极经和极角(r,θ)表示. 对于霍夫线变换,我们将采用第二种方式极坐标系来表示直线,因此直线的表达式可为: 化简便可得到: 对于(x0,y0),我们可以将通过这一点的所有直线统一定义为: 这就意味着每一对  代表一条通过点  的直线. 对于一个给定点   ,我们可以在直角坐标系中,绘出所有通过它的直线(θ 为 x 轴,r 为 y 轴).最