python IOU计算两个矩形的重合率(根据左顶点,高宽),并画出矩形

先上代码:

def IOU(Reframe, GTframe):
    # 得到第一个矩形的左上坐标及宽和高
    x1 = Reframe[0]
    y1 = Reframe[1]
    width1 = Reframe[2]
    height1 = Reframe[3]

    # 得到第二个矩形的左上坐标及宽和高
    x2 = GTframe[0]
    y2 = GTframe[1]
    width2 = GTframe[2]
    height2 = GTframe[3]
    # 计算重叠部分的宽和高
    endx = max(x1 + width1, x2 + width2)
    startx = min(x1, x2)
    width = width1 + width2 - (endx - startx)

    endy = max(y1 + height1, y2 + height2)
    starty = min(y1, y2)
    height = height1 + height2 - (endy - starty)

    # 如果重叠部分为负, 即不重叠
    if width <= 0 or height <= 0:
        ratio = 0
    else:
        Area = width * height
        Area1 = width1 * height1
        Area2 = width2 * height2
        ratio = Area * 1.0 / (Area1 + Area2 - Area)

    return ratio

rec_du = (left_du, top_du, width_du, height_du)  # (x, y , width, height)
rec_s = (left_s, top_s, width_s, height_s)  # (x, y , width, height)
iou_res = IOU(rec_du, rec_s)

仔细看代码会发现是通过根据 重合面积/(两个矩形总面积-重合面积)计算出来的.
而且适用情况是
在这里插入图片描述

以上的矩形还可以使用python画图简要的画出来,可以直接画出来,也可以在一张图片上画出来,比如圈出某一本书
下面是在图片上画矩形的代码

def draw(left_up, right_down, color, th):
    # print(left_up, right_down)
    # 要画在哪张图片上
    img = cv2.imread('19.jpg')
    # print(img.shape)
    cv2.rectangle(img, left_up, right_down, color, th)
    cv2.imshow("fff", img)
    # 这个是一直显示,阻塞在屏幕上。比较好调试,看效果
    # k = cv2.waitKey(0)
    # 将画后的图片继续覆盖到原图
    cv2.imwrite('19.jpg', img)
    
left_up = (10,20) # 左上顶点坐标
right_down = (int(10 + width_du), int(20+ height_du)) # 左上顶点坐标分别加上高宽,就得到了右下顶点坐标
# 分别传入左上顶点和右下顶点坐标,(0, 0, 255)代表颜色,rgb通道的,2是代表画出来的线的厚度
draw(left_up, right_down, (0, 0, 255), 2)
 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值