opencv c++ 霍夫圆检测

news2024/7/5 20:14:25

1、原理

        a)对某点(x_{0},y_{0}),以其为圆心的圆为无数(一圈圈的圆),将其从x-y平面坐标系上转换到r-θ极坐标系上后,则变成了以r、θ为自变量,x_{0},y_{0}为固定值,x、y为因变量的式子:

        (x-x_{0})^{2} + (y - y_{0})^{2} = r^{2}

       b)其余点作同样操作,可以得到,当半径r为某值r_{0}时,使得三个圆同时交于1点,从而获取这些点构成的圆的圆心,半径(x_{0},y_{0},r)

        

         圆的参数方程:

        x = x_{0}+ r *cos{\Theta}

        y= y_{0}+ r *sin{\Theta}

        注:在实际实现时,会设定一个固定的半径r来进行检测(因为r的范围太大了)。

2、API

void cv::HoughCircles	(	InputArray 	image,
                            OutputArray 	circles,
                            int 	method,
                            double 	dp,
                            double 	minDist,
                            double 	param1 = 100,
                            double 	param2 = 100,
                            int 	minRadius = 0,
                            int 	maxRadius = 0 
                            )		

image ——输入的灰度图像。
circles——输出,数据类型为vector (x,y,radius) or (x,y,radius,votes) .
method ——检测方法
dp ——累加器分辨率与图像分辨率的反比. For example, if dp=1 , the accumulator has the same resolution as the input image. If dp=2 , the accumulator has half as big width and height. For HOUGH_GRADIENT_ALT the recommended value is dp=1.5, unless some small very circles need to be detected.
minDist ——两个被检测圆的圆心的最小距离,即在这个距离范围内,不会出现第二个被检测出的圆。 If the parameter is too small, multiple neighbor circles may be falsely detected in addition to a true one. If it is too large, some circles may be missed.
param1 ——Canny边缘检测的高阈值。
param2 ——累计阈值,当相交于同一点的圆的个数大于它时,才记录这个被识别到的圆。
minRadius——圆的最小半径
maxRadius ——圆的最大半径。If <= 0, uses the maximum image dimension. If < 0, HOUGH_GRADIENT returns centers without finding the radius. HOUGH_GRADIENT_ALT always computes circle radiuses.

 

3、代码:

        说明:HoughCircles    会基于canny自动二值化图,因此输入灰度图即可,但由于该算法对图像噪点敏感,必须在调用前对灰度图进行降噪处理

void QuickDemo::hough_circle(Mat& image)
{
	//霍夫圆检测会基于canny自动二值化图,因此输入灰度图即可,但在传入之前,需要对图像进行降噪。
	Mat gray, binary;
	cvtColor(image, gray, COLOR_BGR2GRAY);
	GaussianBlur(gray, gray, Size(9, 9), 2, 2);
	namedWindow("hough gray", WINDOW_FREERATIO);
	imshow("hough gray", gray);

	vector<Vec3f> circles;
	double mindist = 2;
	double min_r = 10;
	double max_r = 200;
	HoughCircles(gray, circles, HOUGH_GRADIENT, 1.5, mindist, 100, 100, min_r, max_r);

	for (size_t i = 0; i < circles.size(); ++i) {
		circle(image, Point(circles[i][0], circles[i][1]), circles[i][2], Scalar(0, 255, 0), 3, 8);
		circle(image, Point(circles[i][0], circles[i][1]), 10, Scalar(250, 0, 0), -1, 8);
	}
	namedWindow("hough circle", WINDOW_FREERATIO);
	imshow("hough circle", image);

}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/65137.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文带你走进JS语法(最全笔记)

目录 基本语法 1.引入方式 2.注释 3.输入输出语句 4.变量和常量 5.原始数据类型 6.运算符 7.流程控制语句 8.数组 9.函数 DOM 1.概述 2.元素对象的操作 3.元素内属性操作 4.元素内文本操作 事件 面向对象 1.定义类的方式 2.继承 内置对象 1.Number对象 2…

matlab贝叶斯隐马尔可夫hmm模型实现

贝叶斯隐马尔可夫模型是一种用于分割连续多变量数据的概率模型。该模型将数据解释为一系列隐藏状态生成。每个状态都是重尾分布的有限混合&#xff0c;具有特定于状态的混合比例和共享的位置/分散参数。 相关视频&#xff1a;马尔可夫链原理可视化解释与R语言区制转换Markov r…

java面试总结

文章目录JVM类的加载过程类加载器有哪些什么是双亲委派双亲委派的好处如何打破双亲委派java内存模型栈帧的结构java堆的分代设计对象内存分配对应的GC为什么需要Survivor区?只有Eden不行吗&#xff1f;为什么要有两个Survivor区对象创建过程对象内存布局对象头Mark Word对象大…

提高 K8S 容器运行时的可观察性最佳方法之一

当谈到云原生可观察性时&#xff0c;可能每个人都会提到OpenTelemetry (OTEL)&#xff0c;因为社区需要依赖标准来将所有集群组件开发指向到同一方向。OpenTelemetry 使我们能够将日志、指标&#xff08;metrics&#xff09;、跟踪&#xff08;traces&#xff09;和其他上下文信…

内容爆炸时代,如何打造品牌经营的“弹药库”?

&#x1f446;点击一键预约本周三主题直播&#x1f446;2017年&#xff0c;华为总裁办发布《华为之熵&#xff0c;光明之矢》的内部学习邮件&#xff0c;将热力学中“熵”的概念应用到企业管理中&#xff0c;成为被人们津津乐道的“熵减哲学”。对于“熵”的概念&#xff0c;大…

[附源码]计算机毕业设计基于vuejs的文创产品销售平台app

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]计算机毕业设计甜品购物网站Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【OpenCV-Python】教程:4-2 Harris角点检测

OpenCV Python Harris 角点检测 【目标】 理解Harris角点检测背后的概念&#xff1b;cv2.cornerHarris(), cv2.cornerSubPix() 【理论】 上一章节中&#xff0c;我们看到在图像中每个方向变化都很大的区域就是角点&#xff0c;一个早期的尝试是由 Chris Harris & Mike …

关闭图片窗口

关闭图片窗口 结果演示 概述 通过事件的绑定来实现&#xff0c;关闭网页中某个图片窗口的效果。 构建HTML框架 <body><div class"box">图片<img src"https://upload-bbs.mihoyo.com/upload/2021/03/11/73281682/f810fbc2e4806aab8176e96feee…

关于数据分析知识的干货分享

数据分析的出现是因为人类难以理解海量数据所呈现出来的信息&#xff0c;不能从中找到相应的规律来对现实中的事物进行对应&#xff0c;我们都知道数据有很高的价值&#xff0c;但不能利用的价值&#xff0c;没有任何意义。 为了解决这一问题&#xff0c;数据分析在长期的数据…

超透镜与超表面全息

超透镜和超表面因其操纵电磁场的独特特性而在科学上声名鹊起&#xff0c;如今它们的制造已经变得可行。但它们的设计难度远远超过了传统镜片&#xff0c;因为必须考虑到纳米级构件的特性。 VirtualLab Fusion的优势  统一的平台&#xff1a;具有将纳米级构建模块和大尺…

JAVA-GUI工具的编写-----事件篇

上一节介绍了HTTP以及HTTPS请求&#xff0c;那么这里我们就接着讲解事件与请求联动。 关于POC以及EXP最大的区别就是&#xff0c;EXP是附带利用功能&#xff0c;而POC仅仅是检测功能&#xff0c;所以这里我们需要动起来&#xff0c;GUI小工具能用上的事件功能其实就两个&#…

【vue3】代码自动格式化和volar卡顿问题解决

一、格式化策略 用eslint做代码检查和格式化是很方便的东西&#xff1b; 这里我们使用vscode完成这些操作&#xff1b; 在代码保存的时候&#xff0c;顺便完成格式化操作 1)装上eslint和prettier插件 2)装完插件之后&#xff0c;我们需要配置一下 打开 文件 > 首选项 >…

为什么阿里巴巴建议HashMap初始化时需要指定容量大小?

为什么阿里巴巴建议HashMap初始化时需要指定容量大小&#xff1f; 为什么&#xff1f; 关于集合类&#xff0c;《阿里巴巴Java开发手册》中写道&#xff1a; 我们先来写一段代码在JDK 1.7 &#xff08;jdk1.7.0_80&#xff09;下面来分别测试下&#xff0c;在不指定初始化容量…

Docker harbor私有仓库部署与管理

Docker harbor私有仓库部署与管理Docker harbor私有仓库部署与管理一、Docker 私有仓库1、下载registry镜像2、修改配置文件/etc/docker/daemon.json &#xff0c;添加私有仓库配置&#xff0c;修改完后重启docker3、创建私有仓库容器4、推送镜像到私有仓库中5、查看当前仓库的…

使用 Lua 脚本和海康 VisionMaster 进行 TCP 通信

说明&#xff1a;因任务需求&#xff0c;需要进行海康VisionMaster服务端和Lua脚本客户端进行TCP通信传输数据。因为之前从未接触过Lua语言&#xff0c;所以也趁机学习一波。 内容Lua教程手册LuaSocket使用方法一方法二报错&#xff1a;“attempt to compare number with strin…

高级_09.性能分析工具的使用

第09章_性能分析工具的使用 1. 数据库服务器的优化步骤 当我们遇到数据库调优问题的时候&#xff0c;该如何思考呢&#xff1f;这里把思考的流程整理成下面这张图。 整个流程划分成了观察&#xff08;Show status&#xff09;和行动&#xff08;Action&#xff09;两个部分。…

Service详解「2」

Service详解「2」 文章目录Service详解「2」Service介绍kube-proxy目前支持三种工作模式:userspace 模式iptables 模式ipvs 模式Service类型Service使用实验环境准备ClusterIP类型的ServiceEndpoint负载分发策略HeadLiness类型的ServiceNodePort类型的ServiceLoadBalancer类型的…

407. 接雨水 II

给你一个 m x n 的矩阵&#xff0c;其中的值均为非负整数&#xff0c;代表二维高度图每个单元的高度&#xff0c;请计算图中形状最多能接多少体积的雨水。 示例 1: 输入: heightMap [[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]] 输出: 4 解释: 下雨后&#xff0c;雨水将会被上…

24节气- ||大雪|| 文案、海报分享,冬寒雪落,归家愈暖。

大雪降至 一年中最寒冷的时候也将到来 大家注意保暖防护 过个温暖的冬天吧&#xff01; 下面是我整理的关于大雪的文案、海报&#xff0c;希望对大家有帮助&#xff01; 更多设计素材免费下载&#xff1a; https://www.sucai999.com/?vNTYxMjky 01 大雪至&#xff0c;人…