使用C#和OPenCV实现圆形检测
文章目录
- 霍夫变换
- 使用 OpenCV 和 C# 实现圆形检测
霍夫变换
在计算机视觉中,圆形检测是一个常见且有用的任务,特别是在物体识别、图像分析和图形处理等领域。OpenCV 是一个强大的开源计算机视觉库,它提供了许多工具来实现不同的图像处理功能,其中包括圆形检测。本文将介绍如何使用 OpenCV 和 C# 实现圆形检测,探讨如何使用霍夫变换 (Hough Transform) 来检测图像中的圆形。
圆形检测的原理
圆形检测的核心算法是 霍夫变换 (Hough Transform),它可以有效地在图像中检测出具有特定几何形状的物体。对于圆形,霍夫变换通过投票方式找到所有符合圆形方程的参数。具体来说,霍夫变换的基本思路是:
- 每个图像中的边缘点在累加器中投票形成一组圆的候选参数。
- 累加器中每个点的值表示该位置的圆心((x, y))以及半径(r)的可能性。
- 然后,程序通过阈值化和圆心候选的聚集情况来确定最终的圆。
使用 OpenCV 和 C# 实现圆形检测
OpenCV 提供了一个名为 HoughCircles 的函数,可以轻松地实现圆形检测。这个函数通过霍夫变换来检测图像中的圆。我们将用 C# 来调用 OpenCV 函数,下面是一个完整的实现过程。
1.安装OPenCVSharp库
它是 OpenCV 的 C# 封装。你可以通过 NuGet 包管理器来安装:
Install-Package OpenCvSharp4
或者在项目上右键->管理NuGet程序包->搜索OPenCVSharp

2.代码实现
using OpenCvSharp;class Program
{static void Main(){// 加载图像Mat src = Cv2.ImRead("图像路径", ImreadModes.Color);Mat src = Cv2.ImRead(imagePath, ImreadModes.Color);// 转为灰度图像Mat gray = new Mat();Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY);// 高斯模糊,去噪Cv2.GaussianBlur(gray, gray, new OpenCvSharp.Size(9, 9), 2, 2);// 使用霍夫变换检测圆CircleSegment[] circles = Cv2.HoughCircles(gray, // 输入图像(灰度图像)HoughModes.Gradient, // 霍夫变换方法dp: 1.0, // dp:图像分辨率与累加器分辨率的反比minDist: 20, // 圆心之间的最小距离param1: 50, // Canny边缘检测的高阈值param2: 30, // 圆心检测的阈值minRadius: 0, // 最小圆半径maxRadius: 50 // 最大圆半径
);// 绘制检测到的圆foreach (var circle in circles){// 将圆心从 Point2f 转换为 Point (整数)var center = new OpenCvSharp.Point((int)circle.Center.X, (int)circle.Center.Y);// 圆的半径是整数int radius = (int)circle.Radius;// 绘制圆Cv2.Circle(src, center, radius, new Scalar(0, 0, 255), 2);// 绘制圆心(使用一个小圆表示)Cv2.Circle(src, center, 3, new Scalar(0, 255, 0), -1); // -1 表示填充}// 显示结果Cv2.ImShow("Detected Circles", src);Cv2.WaitKey();//将处理的好的图像渲染到pictureBox控件(需要装成Bitmap数据)//cvPicture.Image = MatToBitmap(src);}
}
private System.Drawing.Bitmap MatToBitmap(Mat mat)
{// 创建字节数组来接收编码的图像数据byte[] byteArray;// 使用 ImEncode 将 Mat 编码为指定格式(如 .bmp)if (Cv2.ImEncode(".bmp", mat, out byteArray)){// 将字节数组转换为 Bitmapusing (MemoryStream ms = new MemoryStream(byteArray)){return new Bitmap(ms); // 通过 MemoryStream 创建 Bitmap 对象}}else{throw new Exception("图像编码失败!");}
}
显示在pictureBox中的效果,空心圆和实心圆都能识别.

相关文章:
使用C#和OPenCV实现圆形检测
文章目录 霍夫变换使用 OpenCV 和 C# 实现圆形检测 霍夫变换 在计算机视觉中,圆形检测是一个常见且有用的任务,特别是在物体识别、图像分析和图形处理等领域。OpenCV 是一个强大的开源计算机视觉库,它提供了许多工具来实现不同的图像处理功能…...
评估一套呼叫中心大模型呼入机器人的投入回报比?
评估一套呼叫中心大模型呼入机器人的投入回报比? 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 评估一套呼叫中心大模型呼入机器人的投入回报比(ROI),是一个多…...
十八、Label 和 Selector
Label 是键值对,用来标识 Kubernetes 资源(如 Pod、Node、Service 等)的属性。它们并不直接影响资源的行为,但可以帮助用户快速组织、查询和操作这些资源。标签可以用于选择、过滤和分组。 Label: 标签对 k8s 中各种资源进行分类、分组,如Pod和节点进行分组。通过添加kev…...
实现按键按下(低电平)检测到下降沿
按照流程进行编程 步骤1: 初始化函数 包括时基工作参数配置 输入通道配置 更新中断使能 使能捕获、捕获中断及计数器 HAL_TIM_IC_Init(&ic_handle) //时基参数配置 HAL_TIM_IC_ConfigChannel(&ic_handle,&ic_config,TIM_CHANNEL_2) //输…...
解析 SSM 垃圾分类系统,助力生态平衡
前 言 垃圾分类系统,传统的垃圾分类系统模式还处于线下管理阶段,管理效率极低。随着垃圾分类系统信息的不断增多,传统基于线下管理模式已经无法满足当前用户需求,随着信息化时代的到来。通过该系统的设计,管理员可以管…...
软件工程 设计的复杂性
复杂性代表事件或事物的状态,它们具有多个相互关联的链接和高度复杂的结构。在软件编程中,随着软件设计的实现,元素的数量以及它们之间的相互联系逐渐变得庞大,一下子变得难以理解。 如果不使用复杂性指标和度量,软件…...
Nginx 限制只能白名单 uri 请求的配置
实际生产项目中,大多数时候我们会将后端的 http 接口通过前置 nginx 进行反向代理,对互联网用户提供服务。往往我们后端服务所能提供的接口服务是大于互联网用户侧的实际请求的接口地址数量的(例如后端服务一共有100个api接口,经过…...
QT c++ 同时使用sqlite 和mysql数据库的问题
在项目开发中,同时使用了sqlite 和mysql数据库,分开这两部分运行功能都正常,但是一起运行,就异常,sqlite部分不能使用。 现象:出现如下提示 QSqlDatabasePrivate::addDatabase: duplicate connection nam…...
redis集群 服务器更换ip,怎么办,怎么更换redis集群的ip
redis集群 服务器更换ip,怎么办,怎么更换redis集群的ip 1、安装redis三主三从集群2、正常状态的redis集群3、更改redis集群服务器的ip 重启服务器 集群会down4、更改redis集群服务器的ip 重启服务器 集群down的原因5、更改redis集群服务器的ip后…...
【C++习题】19.数组中第K个大的元素
题目:数组中第K个大的元素 链接🔗:数组中第K个大的元素 题目: 代码: class Solution { public:int findKthLargest(vector<int>& nums, int k) {// 将数组中的元素先放入优先级队列中priority_queue<i…...
JIS-CTF: VulnUpload靶场渗透
JIS-CTF: VulnUpload来自 <https://www.vulnhub.com/entry/jis-ctf-vulnupload,228/> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 靶机IP地址192.168.23.162,攻击机IP地址192.168.23.140…...
BGP-面试
简单介绍一下BGP BGP,边界网关协议,属于路径矢量路由协议。属于触发式更新或者增量更新。具有丰富的路由策略,能够灵活的进行路由选择。重心不是在路由学习,而是路由优选、更高效的传递路由和维护大量的路由信息。基于TCP…...
Git-安装与常用命令
目录 1.Git环境配置 1.1下载 1.2配置 1.2.1基本配置 1.2.2常用指令配置别名 1.2.3获取本地仓库 git命令在git bash中演示,会用到一些Linux命令。 1.Git环境配置 1.1下载 Git下载地址:https://git-scm.com/download 傻瓜式安装就可以了。 安装…...
回归预测 | Matlab实现基于BiLSTM-Adaboost双向长短期记忆神经网络结合Adaboost集成学习回归预测
目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 回归预测 | Matlab实现基于BiLSTM-Adaboost双向长短期记忆神经网络结合Adaboost集成学习回归预测 模型设计 基于BiLSTM-Adaboost的回归预测模型结合了双向长短期记忆神经网络(BiLSTM)和Adaboost集成学习的…...
微信小程序跳转其他小程序以及跳转网站
一、跳转其他小程序 1.1 知道appid和页面路径 wx.navigateToMiniProgram({appId: appid, // 替换为目标小程序 AppIDpath: pathWithParams, // 小程序路径envVersion: release, // 开发版、体验版或正式版success(res) {console.log("跳转到其他小程序成功!&q…...
Not using native diff for overlay2, this may cause degraded performance……
问题现象 案例:Anolis 8.9(4.19.91-26.an8.x86_64) Overlay2存储驱动程序) 当我们安装好Docker之后,通过systemctl status docker -l 会发现有一个告警信息:levelwarning msg"Not using native dif…...
【自用】管材流转项目 数据库恢复之 PIPE 表 二维码相关 各个表恢复 SQL
总览 1.后端前端和数据库 PIPE 页面的关系 2.后端批量生成二维码 jpg 图片 3.为了保证 PIPE 正常使用的调整 4.TRANSFORM(流转表) 一、后端前端和数据库 PIPE 页面的关系 1.前端 关于PIPE页面,首先,在前端,我们已经…...
【渗透测试】信息收集二
其他信息收集 在渗透测试中,历史漏洞信息收集是一项重要的工作,以下是相关介绍: 历史漏洞信息收集的重要性 提高效率:通过收集目标系统或应用程序的历史漏洞信息,可以快速定位可能存在的安全问题,避免重复…...
测试工程师八股文04|计算机网络 和 其他
一、计算机网络 1、http和https的区别 HTTP和HTTPS是用于在互联网上传输数据的协议。它们都是应用层协议,建立在TCP/IP协议栈之上,用于客户端(如浏览器)和服务器之间的通信。 ①http和https的主要区别在于安全性。http是一种明…...
定时/延时任务-Kafka时间轮源码分析
文章目录 1. 概要2. TimingWheel2.1 核心参数2.2 添加任务2.3 推进时间 3. TimerTaskList3.1 添加节点3.2 删除节点3.3 刷新链表3.4 队列相关 4. 时间轮链表节点-TimerTaskEntry5. TimerTask6. Timer 和 SystemTimer - 设计降级逻辑7. 上层调用8. 小结 1. 概要 时间轮的文章&a…...
终极RAID启动指南:Ventoy如何简化复杂存储阵列的系统引导
终极RAID启动指南:Ventoy如何简化复杂存储阵列的系统引导 【免费下载链接】Ventoy A new bootable USB solution. 项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy 你是否曾为从RAID阵列启动系统而烦恼?传统的BIOS配置和驱动程序加载过…...
[技术解析] 差异图引导:破解无人机集群微小目标检测的“消失”难题
1. 无人机集群检测的痛点:为什么小目标会"消失"? 当你用无人机监控一片区域时,最头疼的莫过于屏幕上那些比蚂蚁还小的黑点——它们可能是入侵的无人机,也可能是需要追踪的野生动物。但传统算法处理这些目标时࿰…...
CAPL诊断脚本避坑指南:diagSetPrimitiveData和diagSetPrimitiveByte到底怎么选?
CAPL诊断脚本避坑指南:diagSetPrimitiveData和diagSetPrimitiveByte到底怎么选? 在汽车电子诊断测试领域,CAPL脚本的高效编写直接关系到测试覆盖率和执行效率。许多中级开发者在处理大数据块传输或多帧诊断请求时,常常陷入diagSet…...
腾讯优图Youtu-Parsing案例分享:手写体、印章、图表精准识别效果
腾讯优图Youtu-Parsing案例分享:手写体、印章、图表精准识别效果 1. 文档解析的新标杆 在日常工作中,我们经常遇到这样的场景:收到一份扫描的合同,需要提取关键条款;拿到一份手写笔记,想要转为电子版&…...
别再只比精度了!手把手教你用YOLOv5和v7在自定义数据集上做训练优化
别再只比精度了!手把手教你用YOLOv5和v7在自定义数据集上做训练优化 当你第一次在COCO数据集上跑通YOLOv5的demo时,那种"目标检测原来如此简单"的兴奋感可能还记忆犹新。但当你把模型迁移到自己的零件检测、农作物病害识别或零售商品分类任务时…...
Qwen3-TTS开源大模型实操:批量处理CSV文本并生成多语种MP3音频的Python脚本
Qwen3-TTS开源大模型实操:批量处理CSV文本并生成多语种MP3音频的Python脚本 1. 为什么你需要这个脚本:从手动点选到全自动批量合成 你有没有试过用Qwen3-TTS WebUI生成几十条产品介绍语音?每次打开页面、粘贴文本、选语言、点生成、等加载、…...
AI创业,已经没有“出海”这个词了丨量子位沙龙
邓思邈 发自 凹非寺量子位 | 公众号 QbitAIAI创业,已经没有“出海”这个词了。如果你的计划还是“国内卷完再转战海外”,对不起,你可能已经提前出局。在这一波AI浪潮里,Day 0即全球化,早已是圈内默认的入场券。然而&am…...
2023年数字图像处理实战:从噪声滤除到图像恢复的八大核心考题解析
1. 椒噪声滤除:自适应中值滤波实战 遇到图像布满黑白噪点(椒盐噪声)时,传统中值滤波直接暴力替换像素可能误伤细节。去年帮学弟调试车牌识别系统时就遇到过这种情况——滤波后车牌数字"7"直接变成了"1"。后来…...
塞尔达传说旷野之息存档编辑器:轻松掌控海拉鲁大陆的终极工具
塞尔达传说旷野之息存档编辑器:轻松掌控海拉鲁大陆的终极工具 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 还在为《塞尔达传说:旷野之息…...
YimMenu:终极免费的GTA V模组菜单完全指南与安全防护教程
YimMenu:终极免费的GTA V模组菜单完全指南与安全防护教程 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/Y…...
