OpencvSharp 算子学习教案之 - Cv2.RotatedRectangleIntersection 重载1大家好Opencv在很多工程项目中都会用到而OpencvSharp则是以C#开发与实现的Opencv操作库对.NET开发人员友好但很多API的中文资料、应用场景及常见坑点等缺乏系统性归纳因此这系列博客将给大家带来Cv2及Mat对象全系列算子学习教案供大家参考学习。Cv2.RotatedRectangleIntersection教案版本V1.0面向对象OpenCvSharp 初学者所属模块imgproc源码位置OpenCvSharp/Cv2/Cv2_imgproc.cs:4276摘要本页演示RotatedRectangleIntersection(RotatedRect, RotatedRect, OutputArray)如何判断两个旋转矩形是否相交并把交集顶点写入输出容器。1. 函数名称带参数签名publicstaticRectanglesIntersectTypesRotatedRectangleIntersection(RotatedRectrect1,RotatedRectrect2,OutputArrayintersectingRegion)2. 函数用途Cv2.RotatedRectangleIntersection(...)用来判断两个旋转矩形是否重叠并在重叠时返回交集区域顶点。这个重载适合你想把交集区域继续放进矩阵流程里。你希望拿到交集点集后继续画图或测量。你正在做旋转框之间的几何判断。它常用于旋转目标框是否相交。裁剪区域是否有重叠。几何碰撞判断。目标检测后处理的可视化。3. 函数公式两个旋转矩形的交集可以写成I R 1 ∩ R 2 I R_1 \cap R_2IR1∩R2函数会根据I II的状态返回一个枚举值None没有交集。Partial有部分交集。Full一个矩形完全包含另一个矩形。如果存在交集输出区域会给出交集多边形顶点顶点数量最多为 8 个。4. 函数原理说明这个函数的思路是把两个RotatedRect先看成四边形再求它们的重叠部分先把两个旋转矩形展开成四个顶点。再计算它们的几何交集。如果有交集就把交集顶点写进输出容器。对初学者来说最重要的是记住返回值先告诉你“有没有重叠”。输出容器再告诉你“重叠区域长什么样”。交集点集可以直接拿去画多边形。5. 参数含义解析参数名类型必填含义rect1RotatedRect是第一个旋转矩形rect2RotatedRect是第二个旋转矩形intersectingRegionOutputArray是输出交集顶点补充说明intersectingRegion常见具体容器是MatPoint2f。交集点集最多 8 个点。如果没有交集输出容器会是空的。6. 应用场景列表场景名场景说明典型用途场景A框重叠检测判断两个旋转框是否相交目标检测场景B裁剪判断判断裁剪区域是否相交图像处理场景C碰撞可视化画出重叠多边形几何教学场景D后处理过滤根据重叠面积做筛选NMS / 追踪7. 函数使用示例说明下面示例对应 WPF 场景 A。它把交集顶点写入一个MatPoint2f然后打印交集结果。usingSystem;usingOpenCvSharp;internalstaticclassProgram{privatestaticvoidMain(){// 两个旋转矩形故意设计成部分重叠便于观察 Partial 的返回语义。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);// OutputArray 重载适合把交集点集继续存进 Mat。usingvarintersectionMatnewMatPoint2f();varintersectionTypeCv2.RotatedRectangleIntersection(rect1,rect2,intersectionMat);// 交集顶点可以直接读回成 Point2f[]。varintersectionPointsintersectionMat.ToArray();Console.WriteLine($IntersectionType {intersectionType});Console.WriteLine($PointCount {intersectionPoints.Length});// 如果顶点数量不少于 3 个就可以把它当成多边形来计算面积。if(intersectionPoints.Length3){Console.WriteLine($IntersectionArea {Math.Abs(Cv2.ContourArea(intersectionPoints)):F2});}}}8. 注意事项不要把这个函数和普通矩形相交混为一谈它处理的是旋转矩形。交集点集可能为空因此读取前要先看返回值。OutputArray里通常会得到一个可直接画图的点集。如果两个矩形只是接触边或点交集点数量可能很少。9. 调优建议做可视化时先用BoxPoints把两个矩形画出来再看交集。如果只关心是否相交也要记得输出容器不能省。用浅色填充两个矩形、再用深色填充交集教学效果最好。交集点集可以继续喂给Cv2.Polylines或Cv2.FillPoly。10. 进阶扩展可以把这个函数用于旋转框 NMS 的几何辅助计算。可以和MinAreaRect、BoxPoints连起来讲“旋转框的获取与相交”。可以把交集区域面积作为阈值做简单的重叠筛选。可以把多个旋转矩形两两相交扩展成批量碰撞检查。11. 常见错误排查以为返回值只有布尔值实际上还有None / Partial / Full。交集点集为空时还继续读点数组。把输出容器当成输入矩形来理解。没有先画出两个矩形就很难看懂交集结果。相关链接WPF 教学控件Cv2RotatedRectangleIntersectionControl.xaml.cs样例实现RotatedRectangleIntersectionOutputArraySample.cs官方文档源码位置OpenCvSharp/Cv2/Cv2_imgproc.cs
OpencvSharp 算子学习教案之 - Cv2.RotatedRectangleIntersection 重载1
OpencvSharp 算子学习教案之 - Cv2.RotatedRectangleIntersection 重载1大家好Opencv在很多工程项目中都会用到而OpencvSharp则是以C#开发与实现的Opencv操作库对.NET开发人员友好但很多API的中文资料、应用场景及常见坑点等缺乏系统性归纳因此这系列博客将给大家带来Cv2及Mat对象全系列算子学习教案供大家参考学习。Cv2.RotatedRectangleIntersection教案版本V1.0面向对象OpenCvSharp 初学者所属模块imgproc源码位置OpenCvSharp/Cv2/Cv2_imgproc.cs:4276摘要本页演示RotatedRectangleIntersection(RotatedRect, RotatedRect, OutputArray)如何判断两个旋转矩形是否相交并把交集顶点写入输出容器。1. 函数名称带参数签名publicstaticRectanglesIntersectTypesRotatedRectangleIntersection(RotatedRectrect1,RotatedRectrect2,OutputArrayintersectingRegion)2. 函数用途Cv2.RotatedRectangleIntersection(...)用来判断两个旋转矩形是否重叠并在重叠时返回交集区域顶点。这个重载适合你想把交集区域继续放进矩阵流程里。你希望拿到交集点集后继续画图或测量。你正在做旋转框之间的几何判断。它常用于旋转目标框是否相交。裁剪区域是否有重叠。几何碰撞判断。目标检测后处理的可视化。3. 函数公式两个旋转矩形的交集可以写成I R 1 ∩ R 2 I R_1 \cap R_2IR1∩R2函数会根据I II的状态返回一个枚举值None没有交集。Partial有部分交集。Full一个矩形完全包含另一个矩形。如果存在交集输出区域会给出交集多边形顶点顶点数量最多为 8 个。4. 函数原理说明这个函数的思路是把两个RotatedRect先看成四边形再求它们的重叠部分先把两个旋转矩形展开成四个顶点。再计算它们的几何交集。如果有交集就把交集顶点写进输出容器。对初学者来说最重要的是记住返回值先告诉你“有没有重叠”。输出容器再告诉你“重叠区域长什么样”。交集点集可以直接拿去画多边形。5. 参数含义解析参数名类型必填含义rect1RotatedRect是第一个旋转矩形rect2RotatedRect是第二个旋转矩形intersectingRegionOutputArray是输出交集顶点补充说明intersectingRegion常见具体容器是MatPoint2f。交集点集最多 8 个点。如果没有交集输出容器会是空的。6. 应用场景列表场景名场景说明典型用途场景A框重叠检测判断两个旋转框是否相交目标检测场景B裁剪判断判断裁剪区域是否相交图像处理场景C碰撞可视化画出重叠多边形几何教学场景D后处理过滤根据重叠面积做筛选NMS / 追踪7. 函数使用示例说明下面示例对应 WPF 场景 A。它把交集顶点写入一个MatPoint2f然后打印交集结果。usingSystem;usingOpenCvSharp;internalstaticclassProgram{privatestaticvoidMain(){// 两个旋转矩形故意设计成部分重叠便于观察 Partial 的返回语义。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);// OutputArray 重载适合把交集点集继续存进 Mat。usingvarintersectionMatnewMatPoint2f();varintersectionTypeCv2.RotatedRectangleIntersection(rect1,rect2,intersectionMat);// 交集顶点可以直接读回成 Point2f[]。varintersectionPointsintersectionMat.ToArray();Console.WriteLine($IntersectionType {intersectionType});Console.WriteLine($PointCount {intersectionPoints.Length});// 如果顶点数量不少于 3 个就可以把它当成多边形来计算面积。if(intersectionPoints.Length3){Console.WriteLine($IntersectionArea {Math.Abs(Cv2.ContourArea(intersectionPoints)):F2});}}}8. 注意事项不要把这个函数和普通矩形相交混为一谈它处理的是旋转矩形。交集点集可能为空因此读取前要先看返回值。OutputArray里通常会得到一个可直接画图的点集。如果两个矩形只是接触边或点交集点数量可能很少。9. 调优建议做可视化时先用BoxPoints把两个矩形画出来再看交集。如果只关心是否相交也要记得输出容器不能省。用浅色填充两个矩形、再用深色填充交集教学效果最好。交集点集可以继续喂给Cv2.Polylines或Cv2.FillPoly。10. 进阶扩展可以把这个函数用于旋转框 NMS 的几何辅助计算。可以和MinAreaRect、BoxPoints连起来讲“旋转框的获取与相交”。可以把交集区域面积作为阈值做简单的重叠筛选。可以把多个旋转矩形两两相交扩展成批量碰撞检查。11. 常见错误排查以为返回值只有布尔值实际上还有None / Partial / Full。交集点集为空时还继续读点数组。把输出容器当成输入矩形来理解。没有先画出两个矩形就很难看懂交集结果。相关链接WPF 教学控件Cv2RotatedRectangleIntersectionControl.xaml.cs样例实现RotatedRectangleIntersectionOutputArraySample.cs官方文档源码位置OpenCvSharp/Cv2/Cv2_imgproc.cs