【CV基石】计算两个矩形框的IOU

【CV基石】计算两个矩形框的IOU_第1张图片
# -*- coding: UTF-8 -*-
import numpy as np
import cv2

def iou(bbox1, bbox2, center=False):
    """Compute the iou of two boxes. Parameters ---------- bbox1, bbox2: list. The bounding box coordinates: [xmin, ymin, xmax, ymax] or [xcenter, ycenter, w, h]. center: str, default is 'False'. The format of coordinate. center=False: [xmin, ymin, xmax, ymax] center=True: [xcenter, ycenter, w, h] Returns ------- iou: float. The iou of bbox1 and bbox2. """
    if center == False:
        xmin1, ymin1, xmax1, ymax1 = bbox1
        xmin2, ymin2, xmax2, ymax2 = bbox2
    else:
        xmin1, ymin1 = int(bbox1[0] - bbox1[2] / 2.0), int(bbox1[1] - bbox1[3] / 2.0)
        xmax1, ymax1 = int(bbox1[0] + bbox1[2] / 2.0), int(bbox1[1] + bbox1[3] / 2.0)
        xmin2, ymin2 = int(bbox2[0] - bbox2[2] / 2.0), int(bbox2[1] - bbox2[3] / 2.0)
        xmax2, ymax2 = int(bbox2[0] + bbox2[2] / 2.0), int(bbox2[1] + bbox2[3] / 2.0)

    # 获取矩形框交集对应的顶点坐标(intersection)
    xx1 = np.max([xmin1, xmin2])
    yy1 = np.max([ymin1, ymin2])
    xx2 = np.min([xmax1, xmax2])
    yy2 = np.min([ymax1, ymax2])

    # 计算两个矩形框面积
    area1 = (xmax1 - xmin1 + 1) * (ymax1 - ymin1 + 1) 
    area2 = (xmax2 - xmin2 + 1) * (ymax2 - ymin2 + 1)
 
    # 计算交集面积 
    inter_area = (np.max([0, xx2 - xx1])) * (np.max([0, yy2 - yy1]))
    # 计算交并比
    iou = inter_area / (area1 + area2 - inter_area + 1e-6)
    return iou

def main():
    img_dir = 'image/dog-cycle-car.png'
    img = cv2.imread(img_dir)
    bbox1 = [101, 169, 246, 429]
    bbox2 = [121, 138, 304, 374]
    cv2.rectangle(img, (bbox1[0],bbox1[1]), (bbox1[2],bbox1[3]), (0, 255, 0), 2)
    cv2.rectangle(img, (bbox2[0],bbox2[1]), (bbox2[2],bbox2[3]), (255, 0, 0), 2)
    rst = iou(bbox1, bbox2)
    print('iou:', rst)
    cv2.putText(img, 'iou: %.6f' % rst, (10,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,255), 2)
    cv2.imwrite('image/iou_rst.png', img)
    cv2.imshow('iou_rst',img)
    cv2.waitKey(0)

if __name__ == "__main__":
    main()
Technical Exchange

【CV基石】计算两个矩形框的IOU_第2张图片

你可能感兴趣的:(计算机视觉)