一种方便的方法是使用Sutherland-Hodgman多边形剪切算法。它通过将其中一个多边形与另一个多边形的四条支持线(半平面)进行剪切来实现。最终,您会得到交集多边形(最坏情况下为八边形),并通过多边形面积公式计算其面积。 通过在原点周围对多边形进行逆旋转,使其中一个多边形成为轴平行,可以更轻松地进行裁剪。这不会改变面积。请注意,这种方法很容易推广到两个一般的凸多边形,需要O(N.M)次操作。G.T. Toussaint使用旋转卡尺原理将工作量减少到O(N+M),而B. Chazelle和D.P. Dobkin则表明,可以在O(Log(N+M))次操作中检测到非空交集。这表明,即使N=M=4是一个微小的问题,S-H剪辑方法可能还有一些改进空间。
使用rotatedRectangleIntersection函数获取轮廓,使用contourArea函数获取面积并计算比率。 https://docs.opencv.org/3.0-beta/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#rotatedrectangleintersection
假设你有矩形A和B,那么你可以使用以下操作: intersection_area = (A & B).area(); 从这个区域,您可以计算出相对于其中一个矩形的比率。当然,还有更难更动态的方法来实现这一点。