从视频中抽取视频帧并保存

知乎链接

1. 第一步下载opencv

先激活虚拟环境:conda activate pytorch_gpu
(pytorch_gpu) C:\Users\14215>pip install opencv-python==3.4.1.15
Collecting opencv-python==3.4.1.15
  Downloading opencv_python-3.4.1.15-cp36-cp36m-win_amd64.whl (33.6 MB)
     |████████████████████████████████| 33.6 MB 2.2 MB/s
Requirement already satisfied: numpy>=1.11.3 in c:\users\14215\anaconda3\envs\pytorch_gpu\lib\site-packages (from opencv-python==3.4.1.15) (1.19.1)
Installing collected packages: opencv-python
  Attempting uninstall: opencv-python
    Found existing installation: opencv-python 4.4.0.44
    Uninstalling opencv-python-4.4.0.44:
      Successfully uninstalled opencv-python-4.4.0.44
Successfully installed opencv-python-3.4.1.15

(pytorch_gpu) C:\Users\14215>

2.导入代码,进行实验

# 导入所需要的库
import cv2
import numpy as np


# 定义保存图片函数
# image:要保存的图片名字
# addr;图片地址与相片名字的前部分
# num: 相片,名字的后缀。int 类型
def save_image(image, addr, num):
    address = addr + str(num) + '.jpg'
    cv2.imwrite(address, image)


# 读取视频文件
videoCapture = cv2.VideoCapture("E:\\MSU-MFSD\\scene01\\attack\\attack_client001_android_SD_ipad_video_scene01.mp4")
# 通过摄像头的方式
# videoCapture=cv2.VideoCapture(1)

# 读帧
success, frame = videoCapture.read()
i = 0
timeF = 1
j = 0
while success:
    i = i + 1
    if (i % timeF == 0):
        j = j + 1
        save_image(frame, './output/image', j)
        print('save image:', i)
    success, frame = videoCapture.read()

上面的timeF表示你想隔多少帧保存一张图片
我这里设置为1,表示每一帧都要保留
设置为1 的目的是生成所有的帧。用于比较视频和所有图片的大小

先来看看我的视频的信息:
在这里插入图片描述
在这里插入图片描述
由上图可知
总共的帧数大约在10*29.96=299.6帧
由下图可知实际有300帧

在这里插入图片描述
我们可以试着比较这300帧的总大小和原视频的大小
300张图片和一个10秒的视频
我初步判断是前者更大

在这里插入图片描述
在这里插入图片描述

根据上面的大小对比
我判断当数据集为视频的时候
如果不需要序列的知识
我感觉就可以隔多少帧取一帧
没必要每一帧都保存
我觉得像NUAA这种图片数据集,如下图所示
在这里插入图片描述
我感觉也是拍的视频然后自己截取的
至少可以看出来图片之间是不连续的
现在的很多视频数据集中的人基本上不会做什么动作
基本就是眨眼和轻微的晃头
所以我感觉没必要每一帧都保存,相邻帧的变化太小
每一帧都保留不仅浪费磁盘,而且也浪费转换时间
现在的问题就是到底保留多少帧才是理想的?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值