参考资料:

  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

  下面说一下几个要点:

  1.   XXX_1这个地方需要是一个PIL.Image格式的图片,无论你是用torchvision里面的ToPIL搞出来,还是用Image.open打开图片文件,都需要是PIL.Image格式
  2.   XXX_2这个地方是一个BBox的列表,众所周知需要四个值才能确定一个矩形,所以它的形状可能是(n, 4)的array。
  3.   XXX_3这个地方是Label的列表,内容就是str,也就是我们想在对应BBox旁边打上的文字,它的形状可能是(n,)的array或者就是list。
  4.   这段代码最终生效的BBox是xl, yl, xr, yr格式,坐标系参考资料里面有,如果你的BBox做了归一化,或者是其他格式,你需要相应的调整。(我展示的代码里bbox值一开始是归一化的,并且是COCO的格式,[xl,yl,w,h])
  5.   上述代码可能不好直接跑通,包括ttf字体还得自己下载,但是希望你能读到并理解这个绘制的方法,就好。

  最终的效果如下两张图所示,因为是128的分辨率所以看着别扭,label框的大小需要调整,但是可以看到确实能够很方便地把BoundingBox在图片上画出来。

  

如何用Python在图片上绘制BoundingBox相关推荐

  1. python在图片上绘制标注框

    前言 最近帮人跑代码的时候遇到了不少问题,后来发现他提供给我的数据集中标注文件不太准确,部分box框没有很好地框到物体.所以写了一个代码,通过在图片上绘制标注框来直观地判断标注文件是否存在问题,也可以 ...

  2. Python在图片上绘制指定半径的圆

    在调试时,有时需要验证检测位置是否正确,将检测的目标中心画在图片上更直观,因此记录,本例以在图片的中心位置画圆为例. import cv2img = cv2.imread('book.png') he ...

  3. python画圆填色_如何用python在图像上绘制不同笔触和填充颜色的文本?

    How can I draw text with different stroke and fill colors on images with python? Here is some text w ...

  4. python 使用opencv在图片上绘制矩形、圆形以及中英文

    最近看了下python的第三方库opencv,在python中用来对图片进行一些简单处理还是非常好用的,比如在图形上画矩形框,圆框,指示线,椭圆以及文字等,只需要调用几个相应的函数,设置好起止坐标点以 ...

  5. chatgpt赋能python:Python去除图片上的文字:技术与应用

    Python去除图片上的文字:技术与应用 随着互联网的发展,图片的使用越来越广泛.然而,有些图片上却存在着不必要的文字,影响了用户的阅读体验和SEO效果.在这种情况下,Python可以帮助我们快速.准 ...

  6. 使用python检测图片上的色彩

    转贴 :酷python 链接:https://zhuanlan.zhihu.com/p/110182171 (只是个人留存) 使用python检测图片上的色彩 面对一张色彩绚丽的图片,你很像知道某一块 ...

  7. 图片上绘制点阵汉字(C++)

    在Ubuntu下用C/C++(或python) 调用opencv库编程显示一张图片,并打开一个名为"logo.txt"的文本文件(其中只有一行文本文件,包括你自己的名字和学号),按 ...

  8. python保存图像的色彩_使用python检测图片上的色彩

    使用python检测图片上的色彩 面对一张色彩绚丽的图片,你很像知道某一块的颜色是什么,这包括色彩的名字和这一点上色彩的RGB值,但在缺少专业工具的情况下,这似乎是一个难以完成的任务,但python可 ...

  9. python 下载网页文件_『如何用python把网页上的文本内容保存下来』python爬取网页内容教程...

    python爬虫:如何爬网页数据并将其放在文本 用requests库 r=r.requests.get(url) r.concent 保存到文件里就行了 如何用python把网页上的文本内容保存下来 ...

最新文章

  1. 2022-2028年中国未硫化橡胶制品行业市场运行格局及未来前景展望报告
  2. [HTML/CSS]colum-gap属性
  3. mycncart 1.4.0.0 新版本发布
  4. 如何给字体添加底色indesign_“美哉汉字”2020字体设计专家工作坊预告+报名
  5. 保存到本地_不用任何软件工具找回已保存在本地的网页密码
  6. mysql没有group by_MySQL:不在GROUP BY中
  7. PPT使用技巧——绘制圆角曲线
  8. {电脑救助站}常用知识2
  9. java sftp 读取文件_Java代码获取SFTP服务器文件
  10. 【机器学习】(七)马尔可夫链、马尔可夫随机场、条件随机场
  11. 毕业设计 - 题目:基于深度学习的中文汉字识别 - 深度学习 卷积神经网络 机器视觉 OCR
  12. android转发短信到邮箱,利用短信通知的方式在Tasker中实现收到Android手机短信自动转发到邮箱...
  13. IP地址冲突解决方案,局域网IP地址冲突如何解决?
  14. 几种设置开机启动的方法
  15. English Reading - Thai cave rescue boys relive 'moment of miracle'
  16. 使用Spring 定时器 + selenium打卡
  17. 心理测评软件的心理测试法的优缺点,心理测评平台系统优点 心理测试软件 靠谱的心理测评系统...
  18. 虚拟创业云|BBC幼儿英语启蒙动画Nina and the Neurons妮娜和神经元
  19. 教你制作一个简单的进销存管理软件,值得收藏!
  20. python合并表格源代码_Excel电子表格如何合并单元格,Python编程实践,xlwt模块的应用...

热门文章

  1. skinme找不到java_我的世界hello minecraft启动器下载
  2. C语言——feof函数
  3. Android系统开发总体认知
  4. LA@常见特殊类型矩阵@伴随矩阵@方阵的性质@余子式
  5. H5 notification浏览器桌面通知
  6. 金蝶云星空与金蝶云星空对接集成逐个单据查询连通审核单据(分步式调出单提交-审核)
  7. 强化学习---马尔可夫决策过程 MP MRP MDP
  8. 基于Java的校园图书管理APP设计
  9. 开源的动态人脸识别项目
  10. 通俗理解什么是ngram