!!!下面所有代码都是自己在github上搜到的,作者的名字是卢涛!!!

https://github.com/3140102441/Video-key-frame-extraction

运行是在matlab下运行的,一共四个脚本文件。
1、视频变成一帧一帧的图片,第一步运行:read_frame
obj = VideoReader('D:\fly.avi');%输入视频位置,自行根据视频位置修改D:\fly.avi

2、第一种方法:绝对帧差法,运行jueduizhencha
NOF=1538;   %图片数量,注意手动修改,根据第一步运行出来的帧总数NOF自行修改
file_path =  'D:\Documents\MATLAB\lutao\images\';% 图像文件夹路径,根据第一步运行出来的帧的位置自己修改

运行结果会显示出来,镜头切换的帧是哪一帧
我感觉对于突变严重的视频检测比较准确,总体来说不是很准确

3、第二种感知哈希法:第一步仍然是运行read_frame,然后运行ganzhihaxi

运行结果会显示出来,镜头切换的帧是哪一帧
比较准确,会有误检

4、图片相关系数法:第一步仍然是运行read_frame,然后运行picture_xiangguanxishu

这三种方法里面最准确的一种方法

将视频读取为一帧一帧的图片

obj = VideoReader('D:\fly.avi');%输入视频位置NOF=obj.NumberOfFrames;% 帧的总数mkdir([cd,'/images']);%建立目录directory=[cd,'/images/'];for i=1:NOFImg_I=read(obj,i); %读取视频imwrite(Img_I,[directory,[num2str(i) '.jpg'];]); %每一帧输出一张jpgend;

视频变成一帧一帧的图片,第一步运行:read_frame

obj = VideoReader('D:\fly.avi');%输入视频位置,自行根据视频位置修改D:\fly.avi

绝对帧差法镜头分割

%绝对帧间差法:比较相邻图像帧像素的亮度和之差,当大于某个阈值时,则判定发生突变。NOF=1538; %图片数量,注意手动修改file_path = 'D:\Documents\MATLAB\lutao\images\';% 图像文件夹路径img_path_list = dir(strcat(file_path,'*.jpg'));%获取该文件夹中所有jpg格式的图像for i=1:NOF-1image_name_i = strcat(num2str(i),'.jpg'); %图像名img_i = imread(strcat(file_path,image_name_i)); %读取该图像image_name_i_plus = strcat(num2str(i+1),'.jpg');% 后一张图像名img_i_plus = imread(strcat(file_path,image_name_i_plus)); %读取后一张图像img_diff(i)=norm(double(img_i(:,:,1)-img_i_plus(:,:,1)))+norm(double(img_i(:,:,2)-img_i_plus(:,:,2)))+norm(double(img_i(:,:,3)-img_i_plus(:,:,3))); %计算前后两张图像的帧像素的亮度和之差end;Threshold=mean(img_diff)*4; %阈值设定为平均像素差的4倍for i=2:NOF-2if(img_diff(i)>img_diff(i-1)&&img_diff(i)>img_diff(i+1)&&img_diff(i)>Threshold) %如果该图像的像素差大于前后两张以及阈值,则判定为镜头切换的帧编号fprintf('%d\n',i); %输出帧编号end;end;

第一种方法:绝对帧差法,运行jueduizhencha

NOF=1538; %图片数量,注意手动修改,根据第一步运行出来的帧总数NOF自行修改

file_path = 'D:\Documents\MATLAB\lutao\images\';% 图像文件夹路径,根据第一步运行出来的帧的位置自己修改

运行结果会显示出来,镜头切换的帧是哪一帧

我感觉对于突变严重的视频检测比较准确,总体来说不是很准确

感知哈希法

%感知哈希法:感知哈希法是用于相似图片搜索的一种快速算法。NOF=1538; %图像数量file_path = 'D:\Documents\MATLAB\lutao\images\';% 图像文件夹路径img_path_list = dir(strcat(file_path,'*.jpg'));%获取该文件夹中所有jpg格式的图像Threshold=2; %阈值设定为2count=zeros(NOF-1,1); %用于记录与后一张图像有多少位是不同的for i=1:NOF-1image_name_i = strcat(num2str(i),'.jpg'); %图像名img_i = imread(strcat(file_path,image_name_i)); %读取该图像image_name_i_plus = strcat(num2str(i+1),'.jpg');% 后一张图像名img_i_plus = imread(strcat(file_path,image_name_i_plus)); %读取后一张图像imbw_i=im2bw(rgb2gray(imresize(img_i,[8,8]))); %将图像转化为64个像素以及64级灰度imbw_i_plus=im2bw(rgb2gray(imresize(img_i_plus,[8,8]))); %将后一张图像转化为64个像素以及64级灰度for j=1:8for k=1:8if(imbw_i(j,k)~=imbw_i_plus(j,k))count(i)=count(i)+1; %计算与后一张图像有多少位是不同的end;end;end;end;for i=1:NOF-1if(count(i)>Threshold) %如果count大于阈值,说明与后一张图像差别很大,则判定为镜头切换的帧编号fprintf('%d\n',i); %输出帧编号end;end;

第二种感知哈希法:第一步仍然是运行read_frame,然后运行ganzhihaxi

运行结果会显示出来,镜头切换的帧是哪一帧

比较准确,会有误检

图片相关系数法:

%图片相关系数法:定义两幅图像的相关系数来衡量相邻图像帧的相似性。NOF=829; %图像数量file_path = 'D:\Documents\MATLAB\lutao\images\';% 图像文件夹路径img_path_list = dir(strcat(file_path,'*.jpg'));%获取该文件夹中所有jpg格式的图像for i=1:NOF-1image_name_i = strcat(num2str(i),'.jpg'); %图像名img_i = imread(strcat(file_path,image_name_i)); %读取该图像image_name_i_plus = strcat(num2str(i+1),'.jpg');% 后一张图像名img_i_plus = imread(strcat(file_path,image_name_i_plus)); %读取后一张图像img_sim(i)=corr2(img_i(:,:,1),img_i_plus(:,:,1))+corr2(img_i(:,:,2),img_i_plus(:,:,2))+corr2(img_i(:,:,3),img_i_plus(:,:,3)); %计算前后两张图像的相似度img_sim(i)=img_sim(i)/3;end;Threshold=0.8; %相似度阈值for i=1:length(img_sim)if(img_sim(i)<Threshold) %如果相似度小于阈值,则说明与后一张图像不相似,则判定为镜头切换帧fprintf('%d\n',i); %输出帧编号end;end;

图片相关系数法:第一步仍然是运行read_frame,然后运行picture_xiangguanxishu

这三种方法里面最准确的一种方法

视频关键帧提取之镜头分割matlab代码(绝对帧差法、感知哈希法、图像相关系数法)相关推荐

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

    python实现视频关键帧提取(基于帧间差分) 在很多场景下,我们不想或者不能处理视频的每一帧图片,这时我们希望能够从视频中提取出一些重要的帧进行处理,这个过程我们称为视频关键帧提取. 关键帧提取算法 ...

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

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

  3. 认知无线电matlab代码详解,认知无线电频谱感知之功率检测matlab代码.docx

    认知无线电频谱感知之功率检测matlab代码 能量检测仿真实验代码:clear all;clc;n = 5;ps = 1;SNR1 = -5;SNR2 = -8;SNR3 = -10;% Sim_Ti ...

  4. 视频关键帧提取 java_JavaCV实现将视频以帧方式抽取

    使用前: 在用JavaCV实现以帧方式抽取视频的前,我们需要先从bytedeco/javacv下载第三方的压缩包,解压后按自己的需求往自己的IDE ( * IDEA / Eclipse * ) 导入解 ...

  5. python从视频中提取音频信号_三行Python代码提取视频中的音频

    作者:小舟逝江海 http://suo.im/5yOtbx 写在开头 身处数据爆炸增长的时代,各种各样的数据都飞速增长,视频数据也不例外.我们可以使用 python 来提取视频中的音频,而这仅仅需要安 ...

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

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

  7. 使用ffmeg提取视频关键帧

    一. 什么是关键帧 参考维基百科Key frame的解释: 关键帧,是指动画中一个绘图,定义任何的起点和终点平滑过渡.一系列关键帧定义了观看者将看到的运动,而关键帧在电影,视频或动画上的位置定义了运动 ...

  8. Python+Opencv2(三)保存视频关键帧

    文章目录 一.前言 二.视频中保存每帧图片 三.帧间差法 1.两间查分法 (1)处理一段视频 (2)批量处理视频 (3)扩展 2.三间差分法 一.前言 依然是博主毕设的手语检测,好多图片要处理哦! 今 ...

  9. 材料力学求解器-刚架与桁架杆系的计算机求解(附matlab代码)

    材料力学求解器-刚架与桁架杆系的计算机求解(附matlab代码) 1 刚架的计算机求解 1.1位移法与刚度矩阵 1.2 matlab程序 2 桁架的计算机求解 材料力学是一门非常成熟的学科,里面有大量 ...

  10. 视频镜头分割与关键帧提取

    Project Introduction 1 选题 2 工作简介 3 开发环境 Technical Detailss 1 理论知识 边缘检测 关键帧提取 2 具体算法 镜头边缘检测 计算帧与帧之间的差 ...

最新文章

  1. 2021年大数据Hadoop(三十):Hadoop3.x的介绍
  2. TensorFlow 图像数据预处理及可视化
  3. 如何构建高性能web站点之:分布式缓存
  4. Python语言程序设计基础(2)—— Python程序实例解析
  5. 斐讯k1潘多拉专版固件_斐讯K1刷专版潘多拉固件以及教程(使用感受)
  6. php 跳回上一页_php – Laravel 5 – 登录后重定向回到上一页
  7. Android--从相册中选取照片并返回结果
  8. 超全的JS重新加载当前页面的几种方式
  9. 专访1药网董事长于刚:若没刘峻岭 就没我后面创业的精彩
  10. 恢复计算机硬盘数据,计算机数据恢复,小编教您如何恢复计算机数据
  11. 计算机网络重置点命令,重置网络命令 重装系统如何重置网络命令
  12. 符号_特殊符号大全狐狸符号加字和复制
  13. 你什么时候意识到该存钱了?生病住ICU隔壁病友每天被催款时
  14. Consolidation Mappings
  15. 六、路由(routing)
  16. 简单粗暴理解支持向量机(SVM)及其MATLAB实例
  17. 关于使用Pytorch时,训练集模型表现很好但测试集模型表现极差的原因
  18. fft画图出现乱直线情况
  19. 用itchat导入微信好友信息并保存(详细)简单易懂
  20. EPON与APON的区别 10G EPON如何与1G EPON兼容?

热门文章

  1. 【网络编程】TCP/IP协议(互联网的基石)
  2. 图像处理之opencv运行电脑摄像头展现彩色or灰白视频(1)
  3. 3D Slicer - 图像分割标注教程
  4. 五一出游 时尚穿衣全攻略
  5. 基于国外服务器代理openai(反向代理)
  6. 自定义光标-cursor
  7. Unity性能优化之Combine(联合)
  8. 每天醒来都要比前一天更强大,直视自己的畏惧,擦干自己的泪水。
  9. 申宝股票-盐湖提锂板块拉升
  10. 宝塔面板一键迁移连接服务器失败!