当前位置: 首页 > news >正文

OpencvSharp 算子学习教案之 - Cv2.Circle 重载2

OpencvSharp 算子学习教案之 - Cv2.Circle 重载2

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

Cv2.Circle

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

摘要:本页演示 Circle(InputOutputArray, Point, int, Scalar, int, LineTypes, int) 如何直接使用 Point 对象绘制圆,并通过 thickness<0 演示实心圆。

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

publicstaticvoidCircle(InputOutputArrayimg,Pointcenter,intradius,Scalarcolor,intthickness=1,LineTypeslineType=LineTypes.Link8,intshift=0)

2. 函数用途

Cv2.Circle(...)用来在图像上绘制一个圆。

这个重载直接接收Point center,最适合下面这些场景:

  1. 你的上游函数已经返回了一个点对象。
  2. 你想把几何结果和绘图结果继续连起来讲。
  3. 你希望代码更清晰地表达“圆心就是一个点”。

它常用于:

  1. 特征点可视化。
  2. 关键点高亮。
  3. 圆形标注和实心圆提示。
  4. 教学中演示对象化坐标写法。

3. 函数公式

圆的几何定义仍然是:

( x − x 0 ) 2 + ( y − y 0 ) 2 = r 2 (x-x_0)^2+(y-y_0)^2=r^2(xx0)2+(yy0)2=r2

这里只是把圆心从两个整数改成了一个Point对象,几何意义完全没有变化。

shift启用时,整数点仍然可以按固定点方式解释:

p r e a l = p i n t 2 s h i f t p_{real}=\frac{p_{int}}{2^{shift}}preal=2shiftpint

4. 函数原理说明

这个函数和 int 坐标版本的绘制原理相同:

  1. 先读取圆心对象和半径。
  2. 再根据lineType生成边界像素。
  3. 最后按thickness决定画边还是填充。

OpenCV 官方文档还说明了这些边界条件:

  1. 绘图函数会自动裁剪超出图像边界的部分。
  2. 抗锯齿主要适用于 8 位图像。
  3. 颜色通道按 BGR 顺序解释。

对初学者来说,Point版本的价值在于:它更像“几何对象”,而不是“两个分散的数字”。

5. 参数含义解析

参数名类型必填含义
imgInputOutputArray要被绘制的图像
centerPoint圆心
radiusint圆半径
colorScalar圆的颜色
thicknessint线宽,默认 1;小于 0 时表示填充
lineTypeLineTypes线型,默认Link8
shiftint固定点小数位,默认 0

补充说明:

  1. Point很适合和其它几何函数配套使用。
  2. radius仍然是半径,不是直径。
  3. thickness < 0时会得到一个实心圆。

6. 应用场景列表

场景名场景说明典型用途
场景A:关键点高亮把一个检测点画成圆形标记特征可视化
场景B:对象中心用圆表示对象中心位置视觉调试
场景C:实心提示用实心圆强调位置标注提示
场景D:组合几何和线段、文本一起使用教学示意图

7. 函数使用示例

说明:下面示例对应 WPF 场景 B。它直接传入Point center,并把thickness设成-1来演示实心圆。

usingOpenCvSharp;internalstaticclassProgram{privatestaticvoidMain(){// 创建一张白底画布,便于观察填充区域。usingvarcanvas=newMat(240,400,MatType.CV_8UC3,Scalar.White);// 这里直接使用 Point 表示圆心。varcenter=newPoint(230,120);intradius=54;// 把 Mat 包装成 InputOutputArray,明确命中 Point 重载。usingvardrawTarget=InputOutputArray.Create(canvas);// thickness = -1 表示绘制实心圆。Cv2.Circle(drawTarget,center,radius,newScalar(230,126,68),-1,LineTypes.AntiAlias,0);// 保存结果,方便直接检查实心圆的效果。Cv2.ImWrite("circle-point.png",canvas);}}

8. 注意事项

  1. Point只是坐标容器,不会自动帮你做几何校正。
  2. thickness < 0时不会再画边框,而是直接填充。
  3. 如果圆心颜色和背景接近,初学者可能会误以为没画出来。
  4. shift仍然是固定点语义,不是普通缩放参数。

9. 调优建议

  1. 调试时可以先用浅色背景,再用深色圆。
  2. 如果需要突出圆心,可以叠加DrawMarker或文本标签。
  3. 如果要展示边界平滑效果,优先使用LineTypes.AntiAlias
  4. 如果要表达“选中区域”,实心圆通常比空心圆更醒目。

10. 进阶扩展

  1. 可以把圆心和DrawMarker组合起来做调试工具。
  2. 可以和Ellipse对比,帮助初学者理解“圆是椭圆的特例”。
  3. 可以把点坐标从PointPolygonTestFitLine等函数结果中取出来。
  4. 可以和鼠标事件配合做实时交互圆。

11. 常见错误排查

  1. Point当成普通数组使用,而不是几何点对象。
  2. 把半径写成直径。
  3. 误以为thickness < 0只是“更粗一些”。
  4. 忽略了 BGR 和 RGB 的顺序差异。

相关链接:

  • WPF 教学控件:Cv2CircleControl.xaml.cs
  • 样例实现:CirclePointSample.cs
  • 官方文档源码位置:OpenCvSharp/Cv2/Cv2_imgproc.cs
http://www.gsyq.cn/news/1584766.html

相关文章:

  • 【LangChain核心组件】文档加载器
  • CircleCI自动化_circleci-automation
  • 花5万买串口屏,总结出的7条血泪教训做储能设备的千万别再踩坑
  • 鸿蒙PC中使用ohos-sdk完成Rust适配,自动签名编译安装第三方库walkdir是 Rust 递归遍历目录的专用库
  • 一篇文章带你入门漏洞靶场:从 0 到 1 玩转 bWAPP(附完整安装教程)
  • 屏幕截图文字识别工具帮你屏幕截图取字
  • 5分钟搞定OpenCode Go套餐无缝接入Claude Code,性价比直接起飞!
  • 在MacOS上如何安装配置工时通
  • HoRain云--R循环实战:从语法到高效向量化技巧
  • 使用 Python 调用商品条形码查询API并解析商品信息
  • FAST-LIVO2 源码精读(九):VoxelMap 体素地图——哈希索引与八叉树平面拟合
  • 西瓜/甜瓜智能病虫害防控喷雾机上位机 Qt信创完整项目
  • 第31章:构建自定义Code Agent——打造专属的代码助手
  • Power BI 6 月重磅更新:9 大新功能全面提升数据分析效率
  • 【ComfyUI】在Windows电脑上安装 ComfyUI并通过python脚本调用API批量生成图片
  • window显示驱动开发-Direct3D 着色器代码
  • 计算机毕业设计之网络商城系统的设计与实现
  • TVA在机电产品视觉检测的创新应用(13)
  • 告别重复造轮子:C#抽象机器人控制层,兼容ABB/安川/发那科
  • Python之stubsplit包语法、参数和实际应用案例
  • 第六章—18—数据容器的通用操作
  • Kimi LeetCode 3347. 执行操作后元素的最高频率 II C语言实现
  • 【第十期】高级进阶篇:自动化与智能化 —— 如何用 Python 和 AI 辅助挖掘漏洞?
  • 2026-06-23:合并靠近字符。用go语言,现有仅含小写字母的字符串s与整数k,规则说明如下: 1. 判定标准:同一字符串里,若两个相同字母的位置索引差值不超过k,这两个字符视作相邻靠近字符。 2
  • HarmonyOS 6商城开发学习:平板竖屏下的底部“飞件“事故——用 layoutWeight 替掉 position 与 Stack 的响应式救火
  • 项目实训(十一)| 学习路线模块:个性化学习路线生成
  • 【Linux基础】Linux 必学基础指令:echo/cat/ 重定向 / 查找命令全解析
  • 阿里通义千问,8元叠加券,真的可以领到,真没有套路,真不用拉人头,实打实的,就是这么简单!
  • 信创业务技术全景解析:从项目实施到国密安全,一文读懂信创落地核心技术体系(PPT)
  • 《个人头像上传》二、Preferences用户首选项使用指南