如何用Python在图片上绘制BoundingBox
参考资料:
https://blog.csdn.net/weixin_41735859/article/details/106599903
在目标检测等CV领域的任务里,经常会涉及到在图片上绘制BBox,也就是画一个矩形框把目标框起来,并且还可能会打上标签。这篇随笔记录一下在Python里如何在图片上绘制BoundingBox。
我的主要参考对象是参考资料里的方法,参考资料里给出了opencv和PIL来绘制的方法,考虑到大多数机器学习环境里都会有PIL/pillow(这玩意儿都快和python绑定了吧,是python原生的),所以我就记录一下用PIL绘制的方法(不用装新的包嘛!)废话不多说,直接放代码和效果图,并且附上详细的注释:
from PIL import Image, ImageDraw, ImageFont# 1.读取图片
real_im = T.ToPILImage()(XXX_1)
bbox_list = XXX_2
label_list = XXX_3# 2.设置字体格式及大小
font = ImageFont.truetype(font='./Courier-12.ttf', size=np.floor(1.5e-2 * np.shape(real_im)[1] + 10).astype('int32'))# 3.给画笔添加句柄(我就是要在real_im上画画!)
draw = ImageDraw.Draw(real_im)for (label_, bbox_) in zip(label_list, bbox_list):# 4.获取边框坐标# 最终边框格式 bbox = [xl, yl, xr, yr]bbox_[0], bbox_[1], bbox_[2], bbox_[3] = bbox_[0], bbox_[1], bbox_[0] + bbox_[2], bbox_[1] + bbox_[3]bbox_[0] = int(bbox_[0] * real_im.size[0])bbox_[1] = int(bbox_[1] * real_im.size[1])bbox_[2] = int(bbox_[2] * real_im.size[0])bbox_[3] = int(bbox_[3] * real_im.size[1])# 5.获取label长宽label_size = draw.textsize(label_, font)# 6.设置label起点text_origin = np.array([bbox_[0], bbox_[1] + 0.2 * label_size[1]])# 7.随机一个RGB值作颜色color_for_draw = tuple(np.random.randint(0, 255, size=[3]))# 8. 绘制矩形框,加入label文本draw.rectangle([bbox_[0], bbox_[1], bbox_[2], bbox_[3]],outline=color_for_draw, width=2)draw.rectangle([tuple(text_origin), tuple(text_origin + label_size)], fill=color_for_draw)draw.text(text_origin, str(label_), fill=(255, 255, 255), font=font)# 9.删除画笔句柄
del draw
下面说一下几个要点:
- XXX_1这个地方需要是一个PIL.Image格式的图片,无论你是用torchvision里面的ToPIL搞出来,还是用Image.open打开图片文件,都需要是PIL.Image格式
- XXX_2这个地方是一个BBox的列表,众所周知需要四个值才能确定一个矩形,所以它的形状可能是(n, 4)的array。
- XXX_3这个地方是Label的列表,内容就是str,也就是我们想在对应BBox旁边打上的文字,它的形状可能是(n,)的array或者就是list。
- 这段代码最终生效的BBox是xl, yl, xr, yr格式,坐标系参考资料里面有,如果你的BBox做了归一化,或者是其他格式,你需要相应的调整。(我展示的代码里bbox值一开始是归一化的,并且是COCO的格式,[xl,yl,w,h])
- 上述代码可能不好直接跑通,包括ttf字体还得自己下载,但是希望你能读到并理解这个绘制的方法,就好。
最终的效果如下两张图所示,因为是128的分辨率所以看着别扭,label框的大小需要调整,但是可以看到确实能够很方便地把BoundingBox在图片上画出来。
如何用Python在图片上绘制BoundingBox相关推荐
- python在图片上绘制标注框
前言 最近帮人跑代码的时候遇到了不少问题,后来发现他提供给我的数据集中标注文件不太准确,部分box框没有很好地框到物体.所以写了一个代码,通过在图片上绘制标注框来直观地判断标注文件是否存在问题,也可以 ...
- Python在图片上绘制指定半径的圆
在调试时,有时需要验证检测位置是否正确,将检测的目标中心画在图片上更直观,因此记录,本例以在图片的中心位置画圆为例. import cv2img = cv2.imread('book.png') he ...
- python画圆填色_如何用python在图像上绘制不同笔触和填充颜色的文本?
How can I draw text with different stroke and fill colors on images with python? Here is some text w ...
- python 使用opencv在图片上绘制矩形、圆形以及中英文
最近看了下python的第三方库opencv,在python中用来对图片进行一些简单处理还是非常好用的,比如在图形上画矩形框,圆框,指示线,椭圆以及文字等,只需要调用几个相应的函数,设置好起止坐标点以 ...
- chatgpt赋能python:Python去除图片上的文字:技术与应用
Python去除图片上的文字:技术与应用 随着互联网的发展,图片的使用越来越广泛.然而,有些图片上却存在着不必要的文字,影响了用户的阅读体验和SEO效果.在这种情况下,Python可以帮助我们快速.准 ...
- 使用python检测图片上的色彩
转贴 :酷python 链接:https://zhuanlan.zhihu.com/p/110182171 (只是个人留存) 使用python检测图片上的色彩 面对一张色彩绚丽的图片,你很像知道某一块 ...
- 图片上绘制点阵汉字(C++)
在Ubuntu下用C/C++(或python) 调用opencv库编程显示一张图片,并打开一个名为"logo.txt"的文本文件(其中只有一行文本文件,包括你自己的名字和学号),按 ...
- python保存图像的色彩_使用python检测图片上的色彩
使用python检测图片上的色彩 面对一张色彩绚丽的图片,你很像知道某一块的颜色是什么,这包括色彩的名字和这一点上色彩的RGB值,但在缺少专业工具的情况下,这似乎是一个难以完成的任务,但python可 ...
- python 下载网页文件_『如何用python把网页上的文本内容保存下来』python爬取网页内容教程...
python爬虫:如何爬网页数据并将其放在文本 用requests库 r=r.requests.get(url) r.concent 保存到文件里就行了 如何用python把网页上的文本内容保存下来 ...
最新文章
- 2022-2028年中国未硫化橡胶制品行业市场运行格局及未来前景展望报告
- [HTML/CSS]colum-gap属性
- mycncart 1.4.0.0 新版本发布
- 如何给字体添加底色indesign_“美哉汉字”2020字体设计专家工作坊预告+报名
- 保存到本地_不用任何软件工具找回已保存在本地的网页密码
- mysql没有group by_MySQL:不在GROUP BY中
- PPT使用技巧——绘制圆角曲线
- {电脑救助站}常用知识2
- java sftp 读取文件_Java代码获取SFTP服务器文件
- 【机器学习】(七)马尔可夫链、马尔可夫随机场、条件随机场
- 毕业设计 - 题目:基于深度学习的中文汉字识别 - 深度学习 卷积神经网络 机器视觉 OCR
- android转发短信到邮箱,利用短信通知的方式在Tasker中实现收到Android手机短信自动转发到邮箱...
- IP地址冲突解决方案,局域网IP地址冲突如何解决?
- 几种设置开机启动的方法
- English Reading - Thai cave rescue boys relive 'moment of miracle'
- 使用Spring 定时器 + selenium打卡
- 心理测评软件的心理测试法的优缺点,心理测评平台系统优点 心理测试软件 靠谱的心理测评系统...
- 虚拟创业云|BBC幼儿英语启蒙动画Nina and the Neurons妮娜和神经元
- 教你制作一个简单的进销存管理软件,值得收藏!
- python合并表格源代码_Excel电子表格如何合并单元格,Python编程实践,xlwt模块的应用...