iou计算方法

import cv2
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



def draw(left_up, right_down, color, th):
    # print(left_up, right_down)
    # 要画在哪张图片上
    img = cv2.imread('1.jpg')
    # print(img.shape)
    cv2.rectangle(img, left_up, right_down, color, th)
    cv2.imshow("fff", img)
    # 这个是一直显示,阻塞在屏幕上。比较好调试,看效果
    # k = cv2.waitKey(0)
    # 将画后的图片继续覆盖到原图
    cv2.imwrite('1.jpg', img)
    
# 计算IOU值
rec_du = (53,50,100,110)  # (x, y , width, height)
rec_s = (40,70,80,190)  # (x, y , width, height)
iou_res = IOU(rec_du, rec_s)
print(iou_res)

# 绘图
# 分别传入左上顶点和右下顶点坐标,(0, 0, 255)代表颜色,rgb通道的,2是代表画出来的线的厚度
draw((53,50), (100,110), (0, 0, 255), 2)
draw((40,70), (80,190), (0, 0, 255), 2)
# draw(left_up, right_down, (0, 0, 255), 2)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值