笔者在学习MOT(多目标跟踪)的过程中,需要对数据集进行处理,此处以MOT20数据集为例,数据集原始格式为帧图片(MOT20-05),需要按照官网要求合成指定格式的视频。
MOT Challenge官网:https://motchallenge.net/data/MOT20/
此处借助以下脚本进行处理:
import os
import cv2
import time
img_path = 'C:/Users/xiey/Desktop/MOT20/train/MOT20-05/img1'
# 任意读取一张图片来代表视频中图片的尺寸
img = cv2.imread('C:/Users/xiey/Desktop/MOT20/train/MOT20-05/img1/000001.jpg')
imgInfo = img.shape
size = (imgInfo[1], imgInfo[0])
# 获得文件夹中图片的数量,从而进行循环生成视频文件
img_nums = len(os.listdir(img_path))
fourcc = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')
# 写入对象 1.file name 2.编码器 3.帧率 4.尺寸大小
videoWrite = cv2.VideoWriter(
os.path.join(img_path, '../', 'videos.avi'), fourcc, 25, size)
# 读取这个文件夹中的每一张图片(按照顺序)然后组合成视频,帧率是每秒 25 帧
# 由于MOT20-05序列中,图片命名和其它序列不一样,此处借助以下代码来完成
for i in range(len(os.listdir(img_path))):
print(i)
if i < 9:
filename = "00000" + str(i + 1) + ".jpg"
filename = os.path.join(img_path, filename)
# print(filename)
img = cv2.imread(filename)
videoWrite.write(img)
elif 9 <= i < 99:
filename = "0000" + str(i + 1) + ".jpg"
filename = os.path.join(img_path, filename)
# print(filename)
img = cv2.imread(filename)
videoWrite.write(img)
elif 99 <= i < 999:
filename = "000" + str(i + 1) + ".jpg"
filename = os.path.join(img_path, filename)
# print(filename)
img = cv2.imread(filename)
videoWrite.write(img)
else:
filename = "00" + str(i + 1) + ".jpg"
filename = os.path.join(img_path, filename)
# print(filename)
img = cv2.imread(filename)
videoWrite.write(img)
print("Process finish~")
处理效果:
文中部分代码引用自其他博主博客,仅用作学习用途,在此表示感谢,如有侵权,可联系我删除。