按照目标追踪txt文件对原图进行画框标记

该博客介绍了如何使用Python读取和处理txt标注文件,通过遍历目录获取txt文件,对文件进行排序,然后逐行读取内容,将标注信息转换为适合图像绘制的格式。在处理过程中,涉及到字符串切割、坐标转换以及PIL库的Image和ImageDraw模块用于在图片上绘制矩形框。此外,还展示了如何创建进度条来跟踪处理进度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步 读取所有txt文件名

txtlist = []
for home, dirs,files in os.walk(txtpath):
    for filename in files:
        if os.path.splitext(filename)[0][-1] == '1':
             txtlist.append(os.path.join(home,filename))

此时要注意,python读取并不是按照顺序读取,想要正确画框需要对文件排序

txtlist.sort(key=lambda x:int(x.split('_')[-2]))

这里具体的切割方式与排序value取决自己的实际需求,分别改动split中的字符与[-2]中的数字

读取图片同理,不再赘述

第二步 txt文件按行读取后,取出str值并转为list

按行读取数据

f = open(txtlist[count],'r')
lines = f.readlines()

此时lines类型为list,目标追踪生成的txt文件每行结尾都有换行符,需要去掉。

lines[num] = lines[num].strip('\n')

此时lines[num]是一个string类型的数据,想要转成list就改变变量
同时也要注意txt给出的标注信息格式,例如本题中给出的格式为
<bb_xmin>, <bb_ymin>, <bb_width>, <bb_height>
但是PIL的画框参数要求为左上角坐标与右下角坐标
因此需要进行坐标转换,
<bb_xmin>, <bb_ymin>, <bb_xmin>+<bb_width>, <bb_ymin>+<bb_height>

l = lines[num].split(',')
l = list(map(float, l))
t = [l[0],l[1],l[0]+l[2],l[1]+l[3]]

第三步 绘制图片

from PIL import ImageDraw
from PIL import Image

image = Image.open(images[num])
draw = ImageDraw.Draw(image)
draw.rectangle(t,outline=(255,0,0))
image.save(dir + '/' + images[num].split('/')[-1])

对保存路径若无则创建文件夹

if not os.path.exists(dir):
	os.makedirs(dir)

最后 搞一个好看的进度条

from alive_progress import alive_bar

items = range(1000)
with alive_bar(len(items) as bar:
	for item in items:
        bar()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值