视频数据集如何切分成图像?

2023.12.10

确定视频的时长,一般视频是30帧/每秒,如果一个视频的长度为10s的话也就是有300帧,可以根据自己想要的图像数据集的大小,对数据集进行切分。

举个简单的例子就是,视频长度为10s=10*30=300帧,如果你想要一个视频切出来10张图的话,你需要规定30帧切一次!其他的张数,思想类似~

代码部分:

'''
文件保存采用三级目录的方式,

path是文件的绝对路径,例如:从盘符开始的路径:D:\实验\test\zhaopan.jpg
dir是path路径下的某个文件夹的名称,
file是dir文件下某个视频文件的名称
注意:我们从文件夹里面复制下来的路径是D:\*\*\*.jpg这样的,
但是代码中的路径应该是D:/*/*/*.jpg,需要用
反斜杠去写路径。#防转义
'''

import cv2
import os
 
def video_to_frames(path, dir, file, savepath):
    # VideoCapture视频读取类
    # 抽取帧数
    videoCapture = cv2.VideoCapture()
    videoCapture.open(path)
 
    # 将视频名称切分为名字和后缀MP4,放在一个列表里面
    file = file.split('.mp4')
    # 将列表里面的第一个元素取出来,就是不带后缀的名字
    file = file[0]
 
    n = 1
    frametime = 120
    # 取出总帧数
    frames = videoCapture.get(cv2.CAP_PROP_FRAME_COUNT)
 #得到的图像张数=frames/frametime
    for i in range(int(frames)):
        # ret是一个bool类型的数,当为True的时候将这帧照片取出保存在frame里面,反之不取出。
        ret, frame = videoCapture.read()
 
        if i % frametime == 0:
            # 截取的图片的绝对路径,这里我们要建立一个保存图片的文件夹,例如D:/截图,这里是将图片放在一个文件夹下
            #filename = 'D:/截图' + '/' + file + '_' + str(n) + '.jpg'

            #如果不想将图片放在一个文件下,而是和源文件一样的目录结构用下面代码
            filename = savepath + '/' + dir + '/' + file + '_' + str(n) + '.jpg'
            folder = savepath + '/' + dir
            if not os.path.exists(folder):  # 判断是否存在文件夹如果不存在则创建为文件夹
                os.makedirs(folder)
 
            # 将截取视频的图片保存到绝对路径下面
            cv2.imencode('.jpg', frame)[1].tofile(filename)
            print(filename)
            n += 1
 
 
if __name__ == '__main__':
    # 保存文件夹的路径
    savepath = '/kaggle/working/截图'
    # 将一级目录下的所有文件夹的名称以列表的形式保存
    dirs = os.listdir("/kaggle/input/celeb-df-v2")
    for dir in dirs:
        # 将二级目录和一级目录合并,取出二级目录下所有视频文件名称,保存到列表里面
        files = os.listdir("/kaggle/input/celeb-df-v2/" + dir)
        # 得到每个视频文件的绝对路径,并利用切分函数对其进行切分,为了防止异常发生,在出现异常的时候可以继续运行该函数
        for file in files:
            path = '/kaggle/input/celeb-df-v2/{}/{}'.format(dir, file)
            try:
                video_to_frames(path, dir, file, savepath)
            except Exception:
                continue

切分的结果

最后将切分好的数据集下载即可,再对数据集进行标注,就完成了数据集准备的工作~

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值