Opencv 如何计算两个旋转矩形的重叠比?

Opencv 如何计算两个旋转矩形的重叠比?,opencv,geometry,Opencv,Geometry,给定两个矩形,我们知道四个角的位置,宽度,高度,角度。 如何计算这两个矩形的重叠率? 你能帮我一下吗?假设你有矩形A和B,你可以使用这个操作: intersection_area = (A & B).area(); 从该区域,您可以计算其中一个矩形对应的de比率。还有更难、更动态的方法可以做到这一点。一种方便的方法是使用多边形剪裁算法。它的工作原理是用另一个多边形的四条支撑线(半平面)剪裁其中一个多边形。最后得到相交多边形(最坏情况下为八角形),并通过公式找到其面积 通过围绕原

给定两个矩形,我们知道四个角的位置,宽度,高度,角度。 如何计算这两个矩形的重叠率?
你能帮我一下吗?

假设你有矩形A和B,你可以使用这个操作:

 intersection_area =  (A & B).area(); 

从该区域,您可以计算其中一个矩形对应的de比率。还有更难、更动态的方法可以做到这一点。

一种方便的方法是使用多边形剪裁算法。它的工作原理是用另一个多边形的四条支撑线(半平面)剪裁其中一个多边形。最后得到相交多边形(最坏情况下为八角形),并通过公式找到其面积

通过围绕原点反向旋转多边形,使其中一个多边形与轴平行,可以更轻松地进行剪裁。这不会改变这个区域


注意,这种方法很容易推广到两个一般的凸多边形,采用O(N.M)运算。G.T.Tussaint使用旋转卡尺原理,将工作量减少到O(N+M),B.Chazelle&D.P.Dobkin表明,在O(对数(N+M))操作中可以检测到非空交点。这表明S-H剪裁方法可能还有一点改进空间,即使N=M=4是一个小问题。

使用rotatedRectangleIntersection函数获得轮廓,使用contourArea函数获得面积并找到比率


^^呵呵,他也有同样的想法,但对于RotatedRectright,情况并非如此,因为我们知道每个矩形的点。在一张不同的垫子上,用与原始图像相同的尺寸绘制每一张。然后执行AND运算符并计算输出的非零像素。这将提供两种形状共享的像素数我对OpenCV不太了解,但你能用两种不同的颜色(如红色和蓝色)绘制并覆盖它们,然后计算紫色像素数吗?@Mark Setchell,你可以,但这个解决方案可能非常昂贵。您可能需要渲染和计算数百万像素。这也会降低结果的准确性。+1,但您必须提到,两个矩形的旋转应该围绕同一点进行。如果它不是同一个点(例如,每个点都围绕自己的中心旋转),则答案将不正确。这是一个非常常见的错误。为了取悦@Michael Burdinov,我添加了围绕原点的旋转,这使得旋转公式变得最简单。