- 前言
- 一、需要用到的扩展包?
- 1.import os
- 2.import cv2 as cv
- 3.from PIL import Image/import matplotlib.pyplot as plt
- 二、实现思路
- 1.将需要用到的路径保存到变量中待用
- 2.读入图片、跟踪结果数据
- 3.解包lines
- 4.画框、将图片存至指定路径
- 总结
前言
本文记录了在OTB100进行测试并获取到跟踪结果的文本文件后,使用python脚本在相应的视频进行画框处理的代码解释。
一、需要用到的扩展包? 1.import os
在python环境下对文件,文件夹执行操作的一个模块。
- 读取path路径下的所有文件夹名字,每个文件夹对应一个视频名字。
list = os.listdir(path)
- 遍历指定路径下所有文件
fns = [os.path.join(root, fn) for root, dirs, files in os.walk(path + '/' + listname + '/img') for fn in files]
- 判断文件夹是否存在,存在返回True,不存在返回False
isExists = os.path.exists(save_path+'/'+listname)
- 不存在文件夹时,执行创建文件夹的操作
os.mkdir(save_path+'/'+listname)2.import cv2 as cv
import cv2表示导入opencv的包,当然前提是安装好opencv,导入成功后,就可以利用cv2实现很多功能,比如说使用函数cv2.imread(filepath,flags)读入一副图片、使用函数cv2.imshow(wname,img)显示图像、使用函数cv2.imwrite(file,img,num)保存一个图像等等。
- 读取某个视频(文件夹)下指定图片,图片名的格式为右对齐的四位整形数。
img1 = cv.imread(path + '/' + listname + '/img/%.4d.jpg' % (i+1))
- 绘制矩形框,左到右为图片、左上顶点坐标、右下顶点坐标、红色、框线粗细。
img = cv.rectangle(img1, (int(x), int(y)), (int(x) + int(w), int(y) + int(h)), (0, 0, 255), 2)
- 将绘制好框线的图片写入指定路径。
cv.imwrite(save_path + '/' + listname + '/' + '%.4d.jpg' % (i + 1), img)
- 绘图无响应
– 原本打算直接在这个程序中使用cv直接将框好线的图片显示,但使用下面代码发现无响应,估计是图片处理得太快,程序没有等待其显示导致。
cv.namedWindow('IMG')
cv.imshow("IMG", img11)
3.from PIL import Image/import matplotlib.pyplot as plt
Matplotlib是Python的一个绘图库,是Python中最常用的可视化工具之一,可以非常方便地创建2D图表和一些基本的3D图表。
- 绘图和主程序放在同一个进程中导致matplotlib不能实时显示图片(容易卡死)
img = Image.open(save_path + '/' + listname+'/'+ '%.4d.jpg' % (i+1))
plt.figure("Image") # 图像窗口名称
plt.imshow(img)
plt.axis('off') # 关掉坐标轴为 off
plt.title('image') # 图像题目
plt.show()
二、实现思路
1.将需要用到的路径保存到变量中待用
- 下面是将路径赋值给变量的两种形式。
path = 'D:/code/Tracker-visdom/Data/OTB2015' # 原数据集图片保存位置 save_path = r'D:codeTracker-visdomDatapic' # 生成结果保存位置
2.读入图片、跟踪结果数据
- 读入指定文本文件,strip(‘n’)用于移除换行符,split(‘t’)以制表符为分割符,返回分割后的列表。
with open('D:/code/Tracker-visdom/Data/results/OTB/transt/' + listname + '.txt', 'r') as f: # 找到结果的txt
for line in f:
lines.append(line.strip('n').split('t'))
3.解包lines
- lines下的列表中存的是以字符串格式存的x,y,w,h,要取出每个数值再转成float型才能为程序使用。split(‘,’)表以指定字符分割字符串。
aa = []
for mm in range(0, 4):
aa.append(float((lines[i][0].split(','))[mm]))
[x, y, w, h]=aa
4.画框、将图片存至指定路径
- 见一的代码。
总结
例如:以上就是今天要讲的内容,本文仅仅简单介绍了利用os扩展包操作文件和文件夹、利用opencv为图片绘制框线的操作,下一篇博客将介绍如何利用opencv将图片集转换成视频。



