视频训练数预处理

        往期的博客我们简单的讲了什么是视频数据、会用什么方式加载视频数据并介绍了加载视频数据会用到的工具,这期博客我们开始实际的对视频数据做处理,文章内容:获取视频的信息、加载视频数据做处理、保存视频数据。

获取视频帧数与帧率

        上期博客中讲了图像分辨率和帧率的重要性,也是说明对一些高帧率视频需要做降采样,我们接下来就举个例子说明一下。假设我们有一部视频时长为1小时的影片,我们可以通过属性去观看数据的信息,但这对大规模数据来说并不是一个好的方法,那么我们使用opencv来实现这个功能。

import cv2


if __name__ == "__main__":
    video_path = "视频路径"
    cap = cv2.VideoCapture(video_path)
    # 视频总的帧数
    frame_num = cap.get(7)
    # 图片帧率
    fps = cap.get(5)

    while True:
         ret, frame = cap.read()
         print(f"视频帧率{fps} 视频总帧数{frame_num } 视频分辨率{frame.shape}")

        通过上面的代码我们就可以获取到视频的帧率、帧数、分辨率。其中的帧率、帧数和影片时长是相关的,相关计算公式如下:视频时长 = 视频帧数 / 视频帧率。如果我们的影片帧率较高,假设有60fps,但我们只想要采样20fps,这时候就需要对数据做处理了,相关计算公式如下:跳帧数 = 当前视频帧率 / 目标视频帧率 = 60 / 20 = 3(每间隔三张图片数据做一次采样)

加载视频数据并保存成npy格式

        我们在上面列举了目标采样率的计算方式,接下来我们把它应用上,将数据转换成npy格式进行存储(npy格式加载速度更快)。

import cv2
import numpy as np


if __name__ == "__main__":
    video_path = "视频路径"
    cap = cv2.VideoCapture(video_path)
    # 获取帧率
    fps = int(cap.get(5))
    frame_lists = []
    while True:
        ret, frame = cap.read()
        if not(ret):
            break
        # 对图片数据做缩小,缩小为224*224
        frame = cv2.resize(frame, (224, 224))
        # 将三维数据转换为一维
        frame_array = frame.reshape(-1)
        frame_lists.append(frame_array)
    # 根据视频帧率和目标帧率计算采样周期
    interval = int(fps / 20)
    frame_lists = np.array(frame_lists)[::interval]
    # 保存数据
    np.save("npy文件保存地址", frame_lists)

结尾

        感谢您的观看,觉得写的还可以请帮忙点个赞和收藏!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值