news 2026/6/1 6:32:08

OpencvSharp 算子学习教案之 - Cv2.MinEnclosingCircle 重载1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpencvSharp 算子学习教案之 - Cv2.MinEnclosingCircle 重载1

OpencvSharp 算子学习教案之 - Cv2.MinEnclosingCircle 重载1

大家好,Opencv在很多工程项目中都会用到,而OpencvSharp则是以C#开发与实现的Opencv操作库,对.NET开发人员友好,但很多API的中文资料、应用场景及常见坑点等缺乏系统性归纳,因此这系列博客将给大家带来Cv2及Mat对象全系列算子学习教案,供大家参考学习。

Cv2.MinEnclosingCircle

  • 教案版本:V1.0
  • 面向对象:OpenCvSharp 初学者
  • 所属模块:imgproc
  • 源码位置:OpenCvSharp/Cv2/Cv2_imgproc.cs:3376 / 3392 / 3407

摘要:本页演示MinEnclosingCircle(InputArray)如何从Mat点集计算最小外接圆的圆心和半径,并说明结果会写回Point2f centerfloat radius

1. 函数名称(带参数签名)

publicstaticvoidMinEnclosingCircle(InputArraypoints,outPoint2fcenter,outfloatradius)

2. 函数用途

Cv2.MinEnclosingCircle(...)用来计算包住所有输入点的最小圆。

这个重载最适合点集已经在Mat里的场景:

  1. 输入可以直接来自轮廓矩阵。
  2. 返回结果是圆心和半径,便于后续绘图。
  3. 不需要先把点拆成别的容器。

它常用于:

  1. 目标大小估计。
  2. 圆形区域分析。
  3. 几何教学中的“最小包围”概念演示。
  4. 作为更复杂测量步骤的前置结果。

3. 函数公式

最小外接圆可以写成一个约束优化问题:

C ∗ = arg ⁡ min ⁡ C ⊇ P A r e a ( C ) C^* = \arg\min_{C \supseteq P} Area(C)C=argCPminArea(C)

其中圆C CC可以表示为:

C = { ( x , y ) ∣ ( x − c x ) 2 + ( y − c y ) 2 ≤ r 2 } C = \{(x, y) \mid (x-c_x)^2 + (y-c_y)^2 \le r^2\}C={(x,y)(xcx)2+(ycy)2r2}

这里c x , c y c_x, c_ycx,cy是圆心坐标,r rr是半径。

4. 函数原理说明

这个函数的重点不是“画圆”,而是“找到刚好包住全部点的最小圆”。

对初学者来说,可以先这样理解:

  1. 先观察点集的大致分布。
  2. 再寻找一个能包住所有点的最小圆。
  3. 最后把圆心和半径返回给调用者。

官方文档说明它是一个迭代式算法,所以它输出的是数值结果,而不是圆周上的点集。

5. 参数含义解析

参数名类型必填含义
pointsInputArray输入二维点集
centerPoint2f输出圆心
radiusfloat输出半径

补充说明:

  1. points常见来源是MatUMat或轮廓缓存。
  2. centerPoint2f,所以圆心可以保留小数。
  3. radiusfloat,适合直接用于Cv2.Circle

6. 应用场景列表

场景名场景说明典型用途
场景A:目标范围用一个圆概括对象大小检测与测量
场景B:圆形近似估计对象的近似半径粗略分类
场景C:可视化把圆心和半径画回图像教学演示
场景D:教学入门理解“最小外接”几何概念OpenCvSharp 入门

7. 函数使用示例(与 WPF 场景一一对应)

说明:下面示例对应 WPF 场景 A。它先把点集包装成 Mat,再求最小外接圆。

usingSystem;usingOpenCvSharp;internalstaticclassProgram{privatestaticvoidMain(){// 这组点围成一个略微不规则的圆形,便于观察最小外接圆的效果。Point2f[]points={newPoint2f(82.5f,166.0f),newPoint2f(100.0f,108.5f),newPoint2f(158.0f,76.0f),newPoint2f(226.5f,80.5f),newPoint2f(284.0f,122.0f),newPoint2f(300.0f,186.5f),newPoint2f(268.0f,246.0f),newPoint2f(208.5f,270.0f),newPoint2f(140.0f,262.5f),newPoint2f(90.0f,218.0f),};// InputArray 重载常常用在“点集已经存在于 Mat 里”的场景。usingvarpointMat=Mat.FromArray(points);// 这里会返回圆心和半径,便于直接绘图或继续做几何分析。Cv2.MinEnclosingCircle(pointMat,outPoint2fcenter,outfloatradius);// 额外打印一个外接矩形,帮助初学者理解圆和矩形的包围关系。RectboundingRect=Cv2.BoundingRect(pointMat);Console.WriteLine($"PointCount ={points.Length}");Console.WriteLine($"Center = ({center.X:F1},{center.Y:F1})");Console.WriteLine($"Radius ={radius:F2}");Console.WriteLine($"Diameter ={(radius*2):F2}");Console.WriteLine($"CircleArea ={(Math.PI*radius*radius):F2}");Console.WriteLine($"BoundingRect = ({boundingRect.X},{boundingRect.Y},{boundingRect.Width},{boundingRect.Height})");// 这行说明了本例的核心:MinEnclosingCircle 返回的是圆心和半径,而不是圆周点。Console.WriteLine("MinEnclosingCircle 会直接给出圆心和半径,后续可交给 Cv2.Circle 绘制。\n");}}

8. 常见错误与避坑

  1. MinEnclosingCircleHoughCircles混为一谈。
  2. 忘记centerPoint2f,画图时需要先转成像素坐标。
  3. 误以为输出的是圆周上的点集,而不是圆心和半径。
  4. 只关注半径,忽略输入点集整体分布。

9. 进阶扩展

  1. 可以把圆心和半径传给Cv2.Circle画出结果。
  2. 可以把最小外接圆和BoundingRectMinAreaRect放在一起对比。
  3. 可以用圆面积和外接矩形面积做粗略形状分析。
  4. 可以把圆心当成对象中心点,继续做后续测量。

10. 小结

Cv2.MinEnclosingCircle(...)的 InputArray 重载适合已经在Mat中保存的点集。

如果你只想知道“这个点集最小能被什么圆包住”,它会直接返回圆心和半径。

11. 相关链接

  • WPF 教学控件:Cv2MinEnclosingCircleControl.xaml.cs
  • 样例实现:MinEnclosingCircleInputArraySample.cs
  • 官方文档源码位置:OpenCvSharp/Cv2/Cv2_imgproc.cs
  • 另一个重载源码位置:OpenCvSharp/Cv2/Cv2_imgproc.cs
  • 另一个重载源码位置:OpenCvSharp/Cv2/Cv2_imgproc.cs
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/1 6:22:56

可观测性数据智能分析:AI如何赋能运维从监控到洞察

1. 项目概述:当可观测性遇上AI,数据洪流的破局之道在云原生和微服务架构成为主流的今天,我们每天都在生产海量的日志、指标和追踪数据。这些数据就像一座巨大的金矿,蕴藏着系统健康、用户体验和业务价值的秘密。然而,现…

作者头像 李华
网站建设 2026/6/1 6:19:11

AI产品开发中的偏见治理:从数据到设计的实战避坑指南

1. 从算法痴迷到人性觉醒:一个AI产品经理的偏见发现之旅几年前,当我决定投身于构建一个AI驱动的工具时,我的世界几乎被算法和参数填满。和许多技术出身的同行一样,我痴迷于比较BERT和GPT的优劣,反复调整学习率和批次大…

作者头像 李华
网站建设 2026/6/1 6:18:51

Qwen3.5-27B去审查模型:本地部署与多模态应用实践

1. 模型概览与核心定位如果你最近在关注开源大语言模型(LLM)的进展,特别是那些在“自由度”和“能力”之间寻求平衡的模型,那么由 HauhauCS 维护的Qwen3.5-27B-Uncensored-HauhauCS-Aggressive很可能已经进入了你的视野。这个名字…

作者头像 李华