当前位置: 首页 > 后端技术 > Python

用numpy计算两个盒子的iou

时间:2023-03-25 22:55:34 Python

需求很简单,记录一下。Programimportnumpyasnpimportcv2defiou(bbox1,bbox2):xmin1,ymin1,xmax1,ymax1=bbox1xmin2,ymin2,xmax2,ymax2=bbox2#得到矩形框交点对应的顶点坐标(交点)xx1=np.max([xmin1,xmin2])yy1=np.max([ymin1,ymin2])xx2=np.min([xmax1,xmax2])yy2=np.min([ymax1,ymax2])#计算交集面积inter_area=(np.max([0,xx2-xx1]))*(np.max([0,yy2-yy1]))#计算两个矩形的面积area1=(xmax1-xmin1)*(ymax1-ymin1)area2=(xmax2-xmin2)*(ymax2-ymin2)#计算交集比(intersection/union)iou=inter_area/(area1+area2-inter_area)#注意:这里inter_area不能乘以2,乘以2相当于交集部分镂空returnioudefmain():img=np.zeros((600,600),dtype=np.uint8)+255#创建全白画板(灰度图)img=np.stack((img,)*3,axis=-1)#将灰度图转为三通道我的形象。目的是在画板上画出五颜六色的图案。#初始化两个盒子bbox1=[200,200,400,400]#xmin,ymin,xmax,ymaxbbox2=[275,300,325,550]#xmin,ymin,xmax,ymax#在画板上画出二彩色框cv2.rectangle(img,(bbox1[0:2]),(bbox1[2:4]),(255,69,0),-1)cv2.rectangle(img,(bbox2[0:2]),(bbox2[2:4]),(218,112,214),-1)#计算这两个框的iourst=iou(bbox1,bbox2)cv2.putText(img,'iou:%.6f'%rst,(10,30),cv2.FONT_HERSHEY_SIMPLEX,1,(0,0,255),2)cv2.imwrite('res.png',img)if__name__=="__main__":main()结果