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

知乎链接

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
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python视频关键抽取是指使用Python编程语言来从视频提取关键(Key Frames)的过程。 关键是在视频起关键作用的,它们能够概括和表示视频内容的主要信息。一般来说,关键视频发生剧烈变化或重要场景的,与其它连续相比具有较高的信息量。 在Python,可以使用一些现有的库和工具来实现视频关键抽取。其最常用的是OpenCV库,它提供了强大的图像和视频处理功能。 以下是一个简单的Python代码示例,演示了如何使用OpenCV来进行视频关键抽取: ```python import cv2 def extract_keyframes(video_path, interval): video_capture = cv2.VideoCapture(video_path) keyframes = [] frame_count = 0 while True: success, frame = video_capture.read() if not success: break if frame_count % interval == 0: keyframes.append(frame) frame_count += 1 video_capture.release() return keyframes # 调用抽取函数,提取每隔10的关键 keyframes = extract_keyframes('input_video.mp4', 10) # 保存关键为图像文件 for i, keyframe in enumerate(keyframes): cv2.imwrite(f'keyframe_{i}.jpg', keyframe) ``` 在这个示例,我们首先导入了OpenCV库。然后定义了一个`extract_keyframes`函数,它接受视频路径和关键间隔作为参数。 在函数内部,我们使用`cv2.VideoCapture()`打开视频文件,并通过`read()`方法逐读取视频。然后根据设定的关键间隔,选择每隔一定数的作为关键,并将其存储在`keyframes`列表。 最后,我们通过`cv2.imwrite()`将提取到的关键保存为图像文件。 通过以上代码,我们可以方便地使用Python来实现视频关键抽取,从而获得视频的主要内容信息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值