IOU计算Python代码实现



一、目标检测中的IOU代码实现

目标检测中会用IOU大小的值来衡量检测结果与准确结果之间的差距,IOU的计算公式:
IOU=A∩B/A∪B,式中A,B为检测结果和准确结果(groundtruth)检测框的面积大小。

二、代码

代码如下(示例):

def compute_iou(rec_1,rec_2):
    '''
    rec_1:左上角(rec_1[0],rec_1[1])    右下角:(rec_1[2],rec_1[3])
    rec_2:左上角(rec_2[0],rec_2[1])    右下角:(rec_2[2],rec_2[3])

    (rec_1)
    1--------1
    1   1----1------1
    1---1----1      1
        1           1
        1-----------1 (rec_2)
    '''
    s_rec1=(rec_1[2]-rec_1[0])*(rec_1[3]-rec_1[1])   #第一个bbox面积 = 长×宽
    s_rec2=(rec_2[2]-rec_2[0])*(rec_2[3]-rec_2[1])   #第二个bbox面积 = 长×宽
    sum_s=s_rec1+s_rec2                              #总面积
    left=max(rec_1[0],rec_2[0])                      #交集左上角顶点横坐标
    right=min(rec_1[2],rec_2[2])                     #交集右下角顶点横坐标
    bottom=max(rec_1[1],rec_2[1])                    #交集左上角顶点纵坐标
    top=min(rec_1[3],rec_2[3])                       #交集右下角顶点纵坐标
    if left >= right or top <= bottom:               #不存在交集的情况
        return 0
    else:
        inter=(right-left)*(top-bottom)              #求交集面积
        iou=(inter/(sum_s-inter))*1.0                #计算IOU
        print(iou)
if __name__ == '__main__':
    rec_1=(663, 28, 683, 48)                     #四个值分别为左上角顶点(x1,y1),右下角坐标(x2,y2)
    rec_2=(663, 28, 683, 48)
    iou=compute_iou(rec_1,rec_2)
    print(iou)

总结

有问题可在评论区留言,欢迎交流!

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值