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 对象绘制圆并通过 thickness0 演示实心圆。1. 函数名称带参数签名publicstaticvoidCircle(InputOutputArrayimg,Pointcenter,intradius,Scalarcolor,intthickness1,LineTypeslineTypeLineTypes.Link8,intshift0)2. 函数用途Cv2.Circle(...)用来在图像上绘制一个圆。这个重载直接接收Point center最适合下面这些场景你的上游函数已经返回了一个点对象。你想把几何结果和绘图结果继续连起来讲。你希望代码更清晰地表达“圆心就是一个点”。它常用于特征点可视化。关键点高亮。圆形标注和实心圆提示。教学中演示对象化坐标写法。3. 函数公式圆的几何定义仍然是( x − x 0 ) 2 ( y − y 0 ) 2 r 2 (x-x_0)^2(y-y_0)^2r^2(x−x0​)2(y−y0​)2r2这里只是把圆心从两个整数改成了一个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 坐标版本的绘制原理相同先读取圆心对象和半径。再根据lineType生成边界像素。最后按thickness决定画边还是填充。OpenCV 官方文档还说明了这些边界条件绘图函数会自动裁剪超出图像边界的部分。抗锯齿主要适用于 8 位图像。颜色通道按 BGR 顺序解释。对初学者来说Point版本的价值在于它更像“几何对象”而不是“两个分散的数字”。5. 参数含义解析参数名类型必填含义imgInputOutputArray是要被绘制的图像centerPoint是圆心radiusint是圆半径colorScalar是圆的颜色thicknessint否线宽默认 1小于 0 时表示填充lineTypeLineTypes否线型默认Link8shiftint否固定点小数位默认 0补充说明Point很适合和其它几何函数配套使用。radius仍然是半径不是直径。thickness 0时会得到一个实心圆。6. 应用场景列表场景名场景说明典型用途场景A关键点高亮把一个检测点画成圆形标记特征可视化场景B对象中心用圆表示对象中心位置视觉调试场景C实心提示用实心圆强调位置标注提示场景D组合几何和线段、文本一起使用教学示意图7. 函数使用示例说明下面示例对应 WPF 场景 B。它直接传入Point center并把thickness设成-1来演示实心圆。usingOpenCvSharp;internalstaticclassProgram{privatestaticvoidMain(){// 创建一张白底画布便于观察填充区域。usingvarcanvasnewMat(240,400,MatType.CV_8UC3,Scalar.White);// 这里直接使用 Point 表示圆心。varcenternewPoint(230,120);intradius54;// 把 Mat 包装成 InputOutputArray明确命中 Point 重载。usingvardrawTargetInputOutputArray.Create(canvas);// thickness -1 表示绘制实心圆。Cv2.Circle(drawTarget,center,radius,newScalar(230,126,68),-1,LineTypes.AntiAlias,0);// 保存结果方便直接检查实心圆的效果。Cv2.ImWrite(circle-point.png,canvas);}}8. 注意事项Point只是坐标容器不会自动帮你做几何校正。thickness 0时不会再画边框而是直接填充。如果圆心颜色和背景接近初学者可能会误以为没画出来。shift仍然是固定点语义不是普通缩放参数。9. 调优建议调试时可以先用浅色背景再用深色圆。如果需要突出圆心可以叠加DrawMarker或文本标签。如果要展示边界平滑效果优先使用LineTypes.AntiAlias。如果要表达“选中区域”实心圆通常比空心圆更醒目。10. 进阶扩展可以把圆心和DrawMarker组合起来做调试工具。可以和Ellipse对比帮助初学者理解“圆是椭圆的特例”。可以把点坐标从PointPolygonTest、FitLine等函数结果中取出来。可以和鼠标事件配合做实时交互圆。11. 常见错误排查把Point当成普通数组使用而不是几何点对象。把半径写成直径。误以为thickness 0只是“更粗一些”。忽略了 BGR 和 RGB 的顺序差异。相关链接WPF 教学控件Cv2CircleControl.xaml.cs样例实现CirclePointSample.cs官方文档源码位置OpenCvSharp/Cv2/Cv2_imgproc.cs