MATLAB | 读取视频并保存帧图像

一、视频文件的读取及帧图像的保存

%% Get frames from video
 % Author: 羽墨志(https://yumozhi.com/)
 % Date  : 2022-06-01
 
%% Introduction
 % 读取视频并保存视频帧图像到指定目录

v_pathname = 'D:\Kevin\GitSyncdisk\Video\';
v_filename = 'map.mp4';
f_pathname = 'D:\Kevin\GitSyncdisk\Video\Frame\'; % 目录需要预先创建
f_filename = 'map_frame_'; % 图片文件名的前缀,可以根据自己喜好自行定义

height = 480;
width = 640;

v = VideoReader([v_pathname, v_filename]); % 方式一
% v = VideoReader(strcat(v_pathname, v_filename)); % 方式二
% v = VideoReader(sprintf('%s%s',v_pathname, v_filename)); % 方式三
% v = VideoReader('D:\Kevin\GitSyncdisk\Video\map.mp4'); % 方式四

n_frame = 0;

while hasFrame(v)
    frame = readFrame(v);
    gray_img = rgb2gray(frame); % 转换为灰阶图像
    gray_img = imresize(gray_img, [height, width], 'bilinear'); % 调整图像大小
    n_frame = n_frame + 1;
    % 方式一
    % imwrite(gray_img, [f_pathname, f_filename, num2str(n_frame), '.jpg']);
    % 方式二
    % imwrite(gray_img, strcat(f_pathname, f_filename, num2str(n_frame), '.jpg'));
    % 方式三
    imwrite(gray_img, sprintf('%s%s%d%s', f_pathname, f_filename, n_frame, '.jpg'));
end

二、字符串拼接的几种方式

待读取视频的目录结构比较简单,可直接手动拼接后写入,如方式四。有时候为了后续方便,也会根据实际需求将其合理的拆分为几个部分(本文中分为了目录和文件名两个部分),在根据需要进行拼接。对于从视频中读取到的视频帧而言,其数量一般较多,难以为每一幅图像手动构建一个名称后保存,所以需要通过动态拼接的方式生成一系列具有某种规律的文件名,这就意味着图像文件名中一定会包含某些变量,本文中展示了了三种动态拼接字符串的方式:

	% 方式一
    % imwrite(gray_img, [f_pathname, f_filename, num2str(n_frame), '.jpg']);
    % 方式二
    % imwrite(gray_img, strcat(f_pathname, f_filename, num2str(n_frame), '.jpg'));
    % 方式三
    imwrite(gray_img, sprintf('%s%s%d%s', f_pathname, f_filename, n_frame, '.jpg'));

其中n_frame即为文件名中包含的变量,与每一幅帧图像是一一对应的。在三种方式中,第三种方式更为灵活,可以添加格式控制来输出对应的数字字符串。例如将数字部分按照4位输出:

sprintf('%04d', var);

值得注意的是,当var的实际宽度大于前面的控制宽度时会按照实际宽度输出。

三、将帧图像转换为灰度图像

gray_img = rgb2gray(frame); % 转换为灰阶图像

四、调整图片的分辨率

本文中利用的是bilinear算法将图片调整到自己想要的大小。

gray_img = imresize(gray_img,[height,width],'bilinear'); % 调整图像大小
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羽墨志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值