0
点赞
收藏
分享

微信扫一扫

Python计算目标检测中的IoU

龙毓七七 2022-12-07 阅读 149

Python计算目标检测中的IoU

前言

前提条件

相关介绍

实验环境

IoU概念

代码实现

在这里插入图片描述

import cv2
import numpy as np
def CountIOU(RecA, RecB): # Rec = [xmin,ymin,xmax,ymax]
    # 获取交集区域的[xmin,ymin,xmax,ymax]
    x_A_and_B_min = max(RecA[0], RecB[0])
    y_A_and_B_min = max(RecA[1], RecB[1])
    x_A_and_B_max = min(RecA[2], RecB[2])
    y_A_and_B_max = min(RecA[3], RecB[3])
    # 计算交集部分面积, 当(xmax - xmin)为负时,说明A与B框无交集,直接置为0。 (ymax - ymin)同理。
    interArea = max(0, x_A_and_B_max - x_A_and_B_min) * max(0, y_A_and_B_max - y_A_and_B_min)
    # 计算A和B的面积
    RecA_Area = (RecA[2] - RecA[0]) * (RecA[3] - RecA[1]) # (xmax - xmin) * (ymax - ymin)
    RecB_Area = (RecB[2] - RecB[0]) * (RecB[3] - RecB[1]) # (xmax - xmin) * (ymax - ymin)
    # 计算IOU
    iou = interArea / (RecA_Area + RecB_Area - interArea) 
    return iou

def draw_rect(img):
    cv2.rectangle(img, (RecA[0],RecA[1]), (RecA[2],RecA[3]), (0, 0, 255), 2)
    cv2.rectangle(img, (RecB[0],RecB[1]), (RecB[2],RecB[3]), (255, 0, 0), 2)
    cv2.putText(img,'({},{})'.format(RecA[0],RecA[1]),(RecA[0]-20,RecA[1]-5), cv2.FONT_HERSHEY_SIMPLEX, 0.5,(0,255,0),2)
    cv2.putText(img,'({},{})'.format(RecA[2],RecA[3]),(RecA[2]-50,RecA[3]+20), cv2.FONT_HERSHEY_SIMPLEX, 0.5,(0,255,0),2)
    cv2.putText(img,'({},{})'.format(RecB[0],RecB[1]),(RecB[0]-20,RecB[1]-5), cv2.FONT_HERSHEY_SIMPLEX, 0.5,(0,255,0),2)
    cv2.putText(img,'({},{})'.format(RecB[2],RecB[3]),(RecB[2]-50,RecB[3]+20), cv2.FONT_HERSHEY_SIMPLEX, 0.5,(0,255,0),2)

if __name__=="__main__":
    img = cv2.imread("cat1.jpg") 
    img_res = img.copy()
    # A框[xmin,ymin,xmax,ymax]
    RecA = [80,90,330,336]
    # B框[xmin,ymin,xmax,ymax]
    RecB = [200,255,425,490]
    # 原始图片
    draw_rect(img)
    # 计算IOU
    IOU = CountIOU(RecA,RecB)
    # 结果图片
    draw_rect(img_res)
    cv2.putText(img_res,"IOU=%.2f"%IOU,(205, 300),cv2.FONT_HERSHEY_SIMPLEX,0.8,(255,255,255),2)

    cv2.imshow("img",img)
    cv2.imshow("img_res",img_res)
    cv2.waitKey()
    cv2.destroyAllWindows()

在这里插入图片描述

举报

相关推荐

0 条评论