OpencvSharp 算子学习教案之 - Cv2.RotatedRectangleIntersection 重载2
OpencvSharp 算子学习教案之 - Cv2.RotatedRectangleIntersection 重载2大家好Opencv在很多工程项目中都会用到而OpencvSharp则是以C#开发与实现的Opencv操作库对.NET开发人员友好但很多API的中文资料、应用场景及常见坑点等缺乏系统性归纳因此这系列博客将给大家带来Cv2及Mat对象全系列算子学习教案供大家参考学习。Cv2.RotatedRectangleIntersection教案版本V1.0面向对象OpenCvSharp 初学者所属模块imgproc源码位置OpenCvSharp/Cv2/Cv2_imgproc.cs:4306摘要本页演示RotatedRectangleIntersection(RotatedRect, RotatedRect, out Point2f[])如何直接返回交集顶点数组并把交集结果继续用于绘图或面积计算。1. 函数名称带参数签名publicstaticRectanglesIntersectTypesRotatedRectangleIntersection(RotatedRectrect1,RotatedRectrect2,outPoint2f[]intersectingRegion)2. 函数用途这个重载和上一页的数学意义一样区别只是输出方式更直接函数会直接返回Point2f[]。你不用再手工从Mat里读回顶点。适合已经习惯在 C# 里处理点数组的场景。如果你想马上把交集点传给Cv2.Polylines这个重载通常更顺手。3. 函数公式两个旋转矩形的交集仍然是I R 1 ∩ R 2 I R_1 \cap R_2IR1∩R2函数会返回None、Partial或Full并把交集顶点放进Point2f[]。4. 函数原理说明这个重载的核心流程和OutputArray版本相同先算两个旋转矩形的几何交集。再把交集顶点装进数组。返回交集类型方便你先判断重叠状态。对初学者来说这个版本最容易理解因为“输出就是数组”这件事最直接。5. 参数含义解析参数名类型必填含义rect1RotatedRect是第一个旋转矩形rect2RotatedRect是第二个旋转矩形intersectingRegionout Point2f[]是输出交集顶点数组补充说明这个重载的顶点数组可以直接参与后续 C# 几何运算。如果没有交集数组会是空数组。顶点顺序可以直接用于绘制交集多边形。6. 应用场景列表场景名场景说明典型用途场景A直接数组处理交集点集马上进入业务逻辑几何计算场景B绘图教学直接把数组画成多边形教学演示场景C面积估计交集点数足够时算面积碰撞分析场景D对比学习对比 OutputArray 和数组风格API 教学7. 函数使用示例说明下面示例对应 WPF 场景 B。它直接接收Point2f[]交集结果并打印点数。usingSystem;usingOpenCvSharp;internalstaticclassProgram{privatestaticvoidMain(){// 两个旋转矩形故意设计成部分重叠便于观察交集顶点数组。varrect1newRotatedRect(newPoint2f(162.0f,156.0f),newSize2f(186.0f,106.0f),-28.0f);varrect2newRotatedRect(newPoint2f(212.0f,168.0f),newSize2f(170.0f,90.0f),22.0f);// out Point2f[] 重载会把顶点直接写进数组。varintersectionTypeCv2.RotatedRectangleIntersection(rect1,rect2,outPoint2f[]intersectionPoints);Console.WriteLine($IntersectionType {intersectionType});Console.WriteLine($PointCount {intersectionPoints.Length});// 如果顶点足够多就可以继续计算交集面积。if(intersectionPoints.Length3){Console.WriteLine($IntersectionArea {Math.Abs(Cv2.ContourArea(intersectionPoints)):F2});}}}8. 注意事项Point2f[]适合直接参与 C# 几何处理但读取前仍要先看返回值。没有交集时数组会是空的。如果你要继续画图数组可以直接传给Cv2.Polylines。不要把它和一般的Rect相交逻辑混淆。9. 调优建议如果你已经在代码里习惯用数组这个重载最省心。可以把返回数组和ContourArea一起用快速算交集面积。先画两个矩形再看交集会比只看日志更容易理解。需要保存中间结果时数组比 Mat 更方便调试。10. 进阶扩展可以把这个重载和OutputArray版本放在一起做 API 对比。可以把数组直接传给自定义的多边形绘制函数。可以把旋转框相交扩展成批量重叠筛选。可以结合BoxPoints讲旋转矩形顶点的固定顺序。11. 常见错误排查把空数组当成程序错误实际上它可能只是“没有交集”。误以为返回值是面积实际上返回值是交集类型枚举。交集点数很少时还强行做多边形面积计算。没有先理解两个矩形的旋转方向就直接读数组内容。相关链接WPF 教学控件Cv2RotatedRectangleIntersectionControl.xaml.cs样例实现RotatedRectangleIntersectionPoint2fArraySample.cs官方文档源码位置OpenCvSharp/Cv2/Cv2_imgproc.cs