两个横平竖直的矩形,已知顶点坐标,判断是否相交(肉眼看不算)。
如果相交,相交面积是多少?
两个横平竖直矩形如果相交,可以大致有如下三类相对位置
(由其中一种中心旋转或者轴线翻转得出的视为同一类)
我们可以看出三类的相交部分的四条边是有共同特征的。
左侧边:两个矩形左侧边中靠右的那条边
上 边: 两个矩形上边中靠下的那条边
右 边: 两个矩形右边中靠左的那条边
下 边:两个矩形下边中靠上的那条边
另外就是判断不相交。
已图形处理中坐标的特点,左上角为顶点 0,0向右 为正X,向下为正Y
如果一个矩形的左侧边不小于另一个矩形的右侧边,或者同理 上下两边,都是不相交,否则必定相交
求交集比并集 iou
# 已 左上角为x1,y1 右下角为 x2,y2
def getIou(ax1,ay1,ax2,ay2,bx1,by1,bx2,by2):
# 判断如果没有相交直接返回 0
if ax1 >= bx2 or ax2 <= bx1 or ay1 >= by2 or ay2 <= by1:
return 0
# 交集面积
intersection = (min(ax2,bx2) - max(ax1,bx1)) * (min(ay2,by2) - max(ay1,by1))
# 并集面积 = 两个矩形面积相加 减去 交集面积
and_set = lw * lh + w * h - intersection
return intersection / and_set
无论是像素坐标值 还是归一化的小数,都能直接用