首页 > 编程语言 >Python计算目标检测中的IoU

Python计算目标检测中的IoU

时间:2023-05-21 10:07:30浏览次数:44  
标签:img Python 检测 IoU RecA cv2 RecB max 255


Python计算目标检测中的IoU

  • 前言
  • 前提条件
  • 相关介绍
  • 实验环境
  • IoU概念
  • 代码实现

前言

  • 本文是个人使用PythonPython处理文件的电子笔记,由于水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入我的个人主页查看

前提条件

相关介绍

  • Python是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。

实验环境

  • Python 3.x (面向对象的高级语言)

IoU概念

  • loU,英文全称为Intersection of Union,中文称作交并比。对于目标检测识别而言它是一种用来衡量真实框与预测框的贴合程度的方法。
  • 假设真实框为Python计算目标检测中的IoU_Python,预测框为Python计算目标检测中的IoU_目标检测_02Python计算目标检测中的IoU_目标检测_03表示真实框与预测框的交集,Python计算目标检测中的IoU_python_04表示真实框与预测框的并集loU具体的计算方式,如图所示。

代码实现

Python计算目标检测中的IoU_目标检测_05

import cv2
import numpy as np
def CountIOU(RecA, RecB): # Rec = [xmin,ymin,xmax,ymax]
    # 获取交集区域的[xmin,ymin,xmax,ymax]
    x_A_and_B_min = max(RecA[0], RecB[0])
    y_A_and_B_min = max(RecA[1], RecB[1])
    x_A_and_B_max = min(RecA[2], RecB[2])
    y_A_and_B_max = min(RecA[3], RecB[3])
    # 计算交集部分面积, 当(xmax - xmin)为负时,说明A与B框无交集,直接置为0。 (ymax - ymin)同理。
    interArea = max(0, x_A_and_B_max - x_A_and_B_min) * max(0, y_A_and_B_max - y_A_and_B_min)
    # 计算A和B的面积
    RecA_Area = (RecA[2] - RecA[0]) * (RecA[3] - RecA[1]) # (xmax - xmin) * (ymax - ymin)
    RecB_Area = (RecB[2] - RecB[0]) * (RecB[3] - RecB[1]) # (xmax - xmin) * (ymax - ymin)
    # 计算IOU
    iou = interArea / (RecA_Area + RecB_Area - interArea) 
    return iou

def draw_rect(img):
    cv2.rectangle(img, (RecA[0],RecA[1]), (RecA[2],RecA[3]), (0, 0, 255), 2)
    cv2.rectangle(img, (RecB[0],RecB[1]), (RecB[2],RecB[3]), (255, 0, 0), 2)
    cv2.putText(img,'({},{})'.format(RecA[0],RecA[1]),(RecA[0]-20,RecA[1]-5), cv2.FONT_HERSHEY_SIMPLEX, 0.5,(0,255,0),2)
    cv2.putText(img,'({},{})'.format(RecA[2],RecA[3]),(RecA[2]-50,RecA[3]+20), cv2.FONT_HERSHEY_SIMPLEX, 0.5,(0,255,0),2)
    cv2.putText(img,'({},{})'.format(RecB[0],RecB[1]),(RecB[0]-20,RecB[1]-5), cv2.FONT_HERSHEY_SIMPLEX, 0.5,(0,255,0),2)
    cv2.putText(img,'({},{})'.format(RecB[2],RecB[3]),(RecB[2]-50,RecB[3]+20), cv2.FONT_HERSHEY_SIMPLEX, 0.5,(0,255,0),2)

if __name__=="__main__":
    img = cv2.imread("cat1.jpg") 
    img_res = img.copy()
    # A框[xmin,ymin,xmax,ymax]
    RecA = [80,90,330,336]
    # B框[xmin,ymin,xmax,ymax]
    RecB = [200,255,425,490]
    # 原始图片
    draw_rect(img)
    # 计算IOU
    IOU = CountIOU(RecA,RecB)
    # 结果图片
    draw_rect(img_res)
    cv2.putText(img_res,"IOU=%.2f"%IOU,(205, 300),cv2.FONT_HERSHEY_SIMPLEX,0.8,(255,255,255),2)

    cv2.imshow("img",img)
    cv2.imshow("img_res",img_res)
    cv2.waitKey()
    cv2.destroyAllWindows()

Python计算目标检测中的IoU_计算机视觉_06

更多精彩内容,可点击进入Python日常小操作专栏或我的个人主页查看


标签:img,Python,检测,IoU,RecA,cv2,RecB,max,255
From: https://blog.51cto.com/u_15953612/6318599

相关文章

  • Python操作常用数据库
    Python操作常用数据库前言简介SQLite连接SQLite创建数据表增删改查MySQLmysql-connector操作MySQL创建数据表增删改查pymysql操作MySQLMongoDB连接MongoDB增删改查Redis连接Redis前言本文是个人使用Python操作常用数据库的学习笔记,由于水平有限,难免出现错漏,敬请批评改正。简介数据......
  • 你真的了解Python吗?Python一些常见问题总结(一)
    你真的了解Python吗?Python一些常见问题总结(一)前言Python40问参考链接前言本文整理和解答了关于python的一些常见问题,由于水平有限,难免出现错漏,敬请批评改正。Python40问什么是Python?Python-百度百科Python官网Python3菜鸟教程Python是一种解释型语言。这就是说,与C语言和C的......
  • 为什么只有Python可以爬虫,C++可以吗?
    Python(英国发音:/ˈpaɪθən/;美国发音:/ˈpaɪθɑːn/),是一种广泛使用的解释型、面向对象、动态数据类型的高级程序设计语言。Python支持多种编程范型,包括结构化、过程式、反射式、面向对象和函数式编程。它拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个......
  • Python虚拟环境,多版本共存-windows安装【记录】
    使用virtualenv可以快速创建干净的环境,并且可以指定版本。安装virtualenvpipinstallvirtualenv创建虚拟环境virtualenv-pD:\Python\Python36\python.exevenv36D:\Python\Python36\python.exe可以选择已安装的python版本venv36创建的虚拟环境的目录进入虚拟环境......
  • cmd python pip 笔记
    ......
  • python-asyncio
    python-asyncio目录python-asyncioyieldasyncio中几个重要概念异步代码定义和运行asyncio.run()await()asyncio.create_task()创建Task获取协程返回取消任务多任务控制多任务返回其他知识点run_until_complete实现的原理wait与gather中的区别参考文献协程是在用户态实现的......
  • python yield yield from
    pythonyield1:可迭代、迭代器、生成器2:如何运行/激活生成器3:生成器的执行状态4:从生成器过渡到协程:yield可迭代、迭代器、生成器fromcollections.abcimportIterable,Iterator,Generatorisinstance(obj,Iterable)#可迭代对象isinstance(obj,Iterator)......
  • Python潮流周刊#2:Rust 让 Python 再次伟大
    这里记录每周值得分享的Python及通用技术内容,部分为英文,已在小标题注明。(本期标题取自其中一则分享,不代表全部内容都是该主题,特此声明。)文章&教程1、Python修饰器的函数式编程介绍了装饰器的实现原理、带参装饰器、多装饰器、类装饰器和几个典型的示例。文章发布于2014年,代......
  • python中的装饰器原理和作用
    装饰器的作用就是用一个新函数封装旧函数(是旧函数代码不变的情况下增加功能)然后会返回一个新函数,新函数就叫做装饰器,一般为了简化装饰器会用语法糖@新函数来简化例子:这是一段代码,但功能太少,要对这个进行增强,但又不能改变代码。defhello():return"helloworld!"现在我......
  • Python数据可视化小结
    1.引言原始形式的数据对大多数人来说可能都是枯燥乏味的,但是如果掌握正确的可视化工具,给人的印象就会变得引人入胜。本文通过实际例子,让我们利用数据可视化工具来探索不一样的数据体验。闲话少说,我们直接开始吧!2.举个栗子让我们从创建一个数据集开始,假设以下数据集包含2010-2020......