赞
踩
# -*- 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()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。