python用opencv将跟踪图片数据集生成视频

发布于:2024-05-06 ⋅ 阅读:(23) ⋅ 点赞:(0)

1. AIR-MOT数据集

github地址:https://github.com/HeQibin/TGraM
AIR-MOT数据集是一个基于图的多任务建模进行卫星视频中的多目标跟踪、(Multi-Object Tracking, MOT)任务的数据集。在图像领域,多目标跟踪是一个至关重要的任务,它涉及到在动态环境中实时地检测和跟踪多个目标(如车辆、行人等)。

AIR-MOT数据集可能包含了大量的标注视频帧或图像序列,其中每个目标都被精确地标注出来,并提供了目标的类别、位置、尺寸以及可能的轨迹信息。这些数据可以用于训练和评估多目标跟踪算法的性能。

使用AIR-MOT数据集,研究人员可以开发更先进的多目标跟踪算法,以应对卫星视频中的复杂挑战,如目标遮挡、目标之间的交互、动态环境的变化等。通过不断优化算法,可以提高跟踪的准确性和鲁棒性,从而提高卫星视频中可靠目标的跟踪能力。

2. 整体流程

python用opencv将图片数据集生成视频步骤如下:

  1. 导入必要的库:

    • cv2:用于处理图片和视频。
    • os:用于处理文件路径。
    • tqdm:用于显示进度条。
  2. 设置图片文件夹路径和输出视频文件夹路径:

    image_folder = 'path/to/your/image/folder'
    output_folder = 'path/to/your/output/folder'
    

    这里你需要将 'path/to/your/image/folder' 替换为包含图片文件的文件夹路径,将 'path/to/your/output/folder' 替换为你想要保存输出视频的文件夹路径。

  3. 获取图片文件夹中的所有图片文件名,并按文件名排序:

    images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]
    images.sort()
    

    这行代码获取指定文件夹中以 .jpg 结尾的所有图片文件,并按文件名排序。如果是别的格式的,请自己替换。

  4. 初始化视频写入对象:

    video = None
    

    这里初始化了一个视频写入对象 video,用于写入生成的视频。

  5. 遍历图片并生成视频:

    for image in tqdm(images, desc="Converting images to videos"):
    

    这是一个循环,遍历所有图片文件。

  6. 根据图片的数字前缀创建新的视频文件:

    prefix = image.split('_')[0]
    

    这行代码提取了图片文件名中的数字前缀。这里的前缀是以_来划分,不同的数据集可以换成相关规则。

  7. 如果当前视频名称与前缀不一致,创建新的视频写入对象:

    if prefix != current_video_name:
    

    如果当前图片的数字前缀与上一个图片的数字前缀不一致,则表示需要创建新的视频文件。

  8. 获取第一张图片的宽度和高度,用于设置视频的尺寸:

    frame = cv2.imread(os.path.join(image_folder, image))
    height, width, layers = frame.shape
    

    这行代码读取第一张图片,并获取其宽度和高度。

  9. 将当前图片写入当前视频:

    video.write(cv2.imread(os.path.join(image_folder, image)))
    

    这行代码将当前图片写入当前视频。

  10. 完成后释放最后一个视频对象:

    if video is not None:
        video.release()
    

    如果存在视频对象,则释放该对象。

  11. 显示完成信息:

    print("所有视频生成完成!")
    

    这行代码打印输出所有视频生成完成的消息。

3. 总体代码

import cv2
import os
from tqdm import tqdm

# 图片文件夹路径和保存视频的路径
image_folder = 'path/to/your/image/folder'
output_folder = 'path/to/your/output/folder'

# 获取图片文件夹中的所有图片文件名,并按文件名排序
images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]
images.sort()

# 生成视频的编解码器
fourcc = cv2.VideoWriter_fourcc(*'mp4v')

# 初始化一个视频写入对象
video = None
current_video_name = None

# 使用 tqdm 显示进度条
for image in tqdm(images, desc="Converting images to videos"):
    # 根据文件名获取当前图片的数字前缀
    prefix = image.split('_')[0]

    # 如果当前视频名称与前缀不一致,创建新的视频写入对象
    if prefix != current_video_name:
        if video is not None:
            # 完成当前视频的写入并释放对象
            video.release()
        # 创建新的视频文件名
        current_video_name = prefix
        output_video_name = os.path.join(output_folder, f"output_video_{current_video_name}.mp4")
        # 获取第一张图片的宽度和高度,用于设置视频的尺寸
        frame = cv2.imread(os.path.join(image_folder, image))
        height, width, layers = frame.shape
        video = cv2.VideoWriter(output_video_name, fourcc, 10, (width, height))

    # 将当前图片写入当前视频
    video.write(cv2.imread(os.path.join(image_folder, image)))

# 完成后释放最后一个视频对象
if video is not None:
    video.release()

print("所有视频生成完成!")