python实现视频关键帧提取(基于帧间差分)

在很多场景下,我们不想或者不能处理视频的每一帧图片,这时我们希望能够从视频中提取出一些重要的帧进行处理,这个过程我们称为视频关键帧提取。

关键帧提取算法多种多样,如何实现主要取决于你对于关键帧的定义。

也就是说,对于你的实际应用场景,视频中什么样的图片才算是一个关键帧?

今天我实现了一种比较通用的关键帧提取算法,它基于帧间差分。

算法的原理很简单:我们知道,将两帧图像进行差分,得到图像的平均像素强度可以用来衡量两帧图像的变化大小。因此,基于帧间差分的平均强度,每当视频中的某一帧与前一帧画面内容产生了大的变化,我们便认为它是关键帧,并将其提取出来。

算法的流程简述如下:

首先,我们读取视频,并依次计算每两帧之间的帧间差分,进而得到平均帧间差分强度。

然后,我们可以选择如下的三种方法的一种来提取关键帧,它们都是基于帧间差分的:

  1. 使用差分强度的顺序

    我们对所有帧按照平均帧间差分强度进行排序,选择平均帧间差分强度最高的若干张图片作为视频的关键帧。

  2. 使用差分强度阈值

    我们选择平均帧间差分强度高于预设阈值的帧作为视频的关键帧。

  3. 使用局部最大值

    我们选择具有平均帧间差分强度局部最大值的帧作为视频的关键帧。

    这种方法的提取结果在丰富度上表现更好一些,提取结果均匀分散在视频中。

    需要注意的是,使用这种方法时,对平均帧间差分强度时间序列进行平滑是很有效的技巧。它可以有效的移除噪声来避免将相似场景下的若干帧均同时提取为关键帧。

这里比较推荐使用第三种方法来提取视频的关键帧

获取源码点这里

最初的代码来自于这里, 但是其代码本身有些问题,在读取超过100M的视频时程序会出现内存溢出的错误,因此我对其进行了优化,减去了不必要的内存消耗。

在精灵宝可梦的一个经典片段中进行了实验,平滑后的平均帧间差分强度如下图所示:

提取的部分关键帧如下所示:

效果还不错吧~

我这里仅仅是对视频关键帧提取的方法进行了简单的探索,最终得到的效果也满足了我实际工作的需要。如果您对视频关键帧提取领域很了解,或者了解其他更好的方法,期待与您交流~

最后,对算法感兴趣的小伙伴,欢迎关注我的github项目AI-Toolbox。

此项目旨在提高效率,快速迭代新想法,欢迎贡献代码~

python实现视频关键帧提取(基于帧间差分)相关推荐

  1. python视频帧提取并保存_如何用python实现视频关键帧提取并保存为图片?

    展开全部 import cv2 vc = cv2.VideoCapture('Test.avi') #读入视频文件2113 c=1 if vc.isOpened(): #判断是否正常打开5261 rv ...

  2. python视频提取关键帧_一种视频关键帧提取算法的制作方法

    本发明属于信息安全技术领域,涉及视频内容信息的提取,具体来说,是一种视频关键帧提取算法. 背景技术: 随着Internet的应用和普及,多媒体信息检索系统对社会各领域产生越来越大的影响.传统的信息检索 ...

  3. 基于帧间频域分析的视频篡改检测

    基于帧间频域分析的视频篡改检测 摘要:提出一种通过帧间频域分析,来对视频频篡进行盲检测.本文首先梳理分析目前视频分析取证的一些方法.总结出视频分析的依赖于视频连续帧中某一特性的不变性或连续性,提出可以 ...

  4. python一帧一帧读取视频_用Python从视频中提取每一帧的图片

    大家应该都有这样的情况:在看到某些视频的画面时感觉美如画,想截取下来却又烦于截图的繁琐,现在我就教大家使用Python提取视频中每一帧的画面,让大家不错过每一个精彩的瞬间! •语言:Python •所 ...

  5. 背景提取算法——帧间差分法、背景差分法、ViBe算法、ViBe+算法

    背景提取是在视频图像序列中提取出背景,背景就是场景中静止不动的景物.因为摄像机不动,因此图像中的每个像素点都有一个对应的背景值,在一段时间内,这个背景值是比较固定的.背景提取的目标就是根据视频图像序列 ...

  6. matlab视频帧间差分,matlab中视频帧间差分

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %本程序主要用于从视频中读入帧,并且进行从任意位置的连续两帧差分,差分的结果于阈值比较,从而提取出运动目标的轮廓,处 ...

  7. 如何用python实现视频字幕提取?

    要用Python实现视频字幕提取,需要用到一些第三方库.以下是一种使用Python和FFmpeg和pytesseract的方法: 1.安装FFmpeg和pytesseract 首先需要安装FFmpeg ...

  8. CVPR 2023 | EMA-VFI: 基于帧间注意力提取运动和外观信息的高效视频插帧

    ©作者 | Guozhen Zhang 单位 | 南京大学媒体计算组 本文介绍南京大学媒体计算组最近被 CVPR 2023 接收的视频插帧方向的工作:Extracting Motion and App ...

  9. 视频程式化的基于帧差异的时间损失

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小白导读 论文是学术研究的精华和未来发展的明灯.小白决心每天为大家 ...

最新文章

  1. 遇见requestAnimationFrame
  2. HBase简单代码实例(Java)
  3. KEIL MDK 仿真时程序”乱跑“问题
  4. linux压缩命令 实例子,Linux下的tar压缩解压缩命令详解及使用实例分析
  5. KVM虚拟机的优化历程---按需优化
  6. linux 命令 find -exec 操作的问题
  7. Idea中搭建Wildfly(JBoss)运行环境(Mac)
  8. 游戏服务器框架 Leaf/go
  9. QT--编写自己的TCP/IP上位机软件--demo
  10. 在线合成车牌照片【模拟车牌,用于车牌识别项目测试】
  11. odoo 14 手册 客户 报价单 销售订单
  12. Linux:dperf---100Gbps开源压力测试工具
  13. 描述性统计分析案例题_SPSSAU描述性分析指标如何选择?
  14. 《漫画机器学习入门》总结
  15. 表格进阶03—出纳日报表(表格,再次练习)
  16. MySQL索引的底层数据结构衍变史
  17. C基础学习笔记——01-C基础第02天(用户权限、VI操作、Linux服务器搭建)
  18. c语言 long与integer,VB中Integer(整型)和Long(长整型)有什么区别?
  19. brpc线程模型学习
  20. 天晴。有微凉的风。

热门文章

  1. formSelects-v4.js 基于Layui的多选解决方案
  2. JQuery使用笔记
  3. Oracle 循环相关
  4. java 使用json-lib 对象,String,json互转
  5. 淘宝JavaScript 编码风格规范
  6. 牛客21781 牛兄牛弟
  7. IntelliJ IDEA汉化版jar包
  8. html div 知识点,HTML知识点总结之div、section标签
  9. java右移位_java中的左移 右移
  10. sae 微信 java web_[1] 微信公众号与sae的web应用之间的配置