MATLAB读取视频并按帧保存

%存第k帧 
clc;
clear;
video_file='D:\pictures\5.mp4';%读取视频位置
obj=VideoReader(video_file);
frame_num=obj.NumberOfFrames;%一共有多少帧
frame = read(obj,Inf);%获取最后一帧(frame = read(obj,k);%读取第k帧)
imwrite(frame,strcat('D:\pictures\last.jpg'),'jpg');% 只保存最后一帧,并命名

运行后D盘相应文件夹即出现相应图片:
在这里插入图片描述
ps:
1.下述方法一和方法二只是命名语句不同```
2.下述代码其实可以保存所有帧,只是帧数太多,以保存前15帧为例。

%存前15帧 ,方法一
clc;
clear;

%读取视频
video_file='D:\pictures\5.mp4';
obj=VideoReader(video_file);
frame_num=obj.NumberOfFrames;%一共有多少帧
% 分离图片
for i=1:15%读取前15帧
    img=strcat('D:\pictures\',num2str(i));
    img=strcat(img,'.jpg');
    I=read(obj,i);%读出第15帧图片
    imwrite(I,strcat('D:\pictures\',num2str(i),'.jpg'),'jpg');% 保存帧
end

在这里插入图片描述

%存前15帧,方法二
%% 将视频逐帧保存为jpg图片
clc;
clear all;
close all;
obj = VideoReader('D:\pictures\5.mp4');%输入视频位置
numFrames = obj.NumberOfFrames;% 帧的总数
numzeros= 4;%图片name长度
nz = strcat('%0',num2str(numzeros),'d');
for k = 1:15% 读取前15帧
    frame = read(obj,k);%读取第几帧
    id=sprintf(nz,k);
    imwrite(frame,strcat('D:\pictures\',id,'.jpg'),'jpg');% 保存帧
end

在这里插入图片描述

转载read知识:
read函数用于读取视频帧
frame = read(obj),获取该视频对象的所有帧
frame = read(obj,index),获取该视频对象的制定帧
frame = read(obj, 1); % first frame only 获取第一帧
frame = read(obj, [1 10]); % first 10 frames 获取前10帧
frame = read(obj, Inf); % last frame only 获取最后一帧
frame = read(obj, [50 Inf]); % frame 50 thru end 获取第50帧之后

这里参考到两篇帖子,特此声明(侵删)
原文链接:
https://blog.csdn.net/qq_23097931/article/details/51108747
https://blog.csdn.net/sannianyihoushuma/article/details/84205864?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

发布了9 篇原创文章 · 获赞 0 · 访问量 580

猜你喜欢

转载自blog.csdn.net/qq_43536231/article/details/104722187