【MATLAB】读入视频存成帧处理和输出视频

【MATLAB】读入视频存成帧处理和输出视频

一、读入视频存成帧

VideoReaderstrcatreadimwrite

1.VideoReader
是读入视频函数。用来读入视频。具体用法如下代码所示,具体参数如下图所示:

fileName = 'video11.mp4';
obj = VideoReader(fileName);

在这里插入图片描述
2.strcat
字符串连接函数。strcat(str,ptr)表示将字符串ptr的内容连接到字符串str后,得到一个组合后的字符串str。

3.read
读取视频帧函数。可以通过设置参数获得所需要的帧。

frame = read(obj),%获取所有帧
frame = read(obj,index),%获取指定帧
frame = read(obj, 1);         %获取第一帧
frame = read(obj, [1 10]);    % 获取前10帧
frame = read(obj, Inf);       % 获取最后一帧
frame = read(obj, [50 Inf]);  % 获取第50帧之后所有帧

4.imwrite
将图像存入指定文件。imwrite(A,filename,fmt)A表示待保存图像数据,filename表示保存目录,fmt表示保存格式。

具体例子:

fileName = 'video11.mp4';
obj = VideoReader(fileName);
numFrames = obj.NumberOfFrames;% 帧的总数
for k = 1 : numFrames% 读取数据
frame = read(obj,k);
imshow(frame);%显示帧
imwrite(frame,strcat('E:\研究生\project\frame11\',num2str(k),'.jpg'),'jpg');% 保存帧。 
end

二、输出视频

VideoWriterwriteVideo

1.VideoWriter

创建视频文件函数。writerObj=VideoWriter('test.mp4');创建一个叫test的mp4视频文件。

2.writeVideo

从图像中创建视频。

writerObj = VideoWriter(filename,profile)
  • filename:表示单引号引用的字符串来指定视频文件名,文件名可以加扩展名,也可以不加。(支持的视频文件扩展名有:avi,.mj2,.mp4 或.m4v。)若不加则根据profile的设置来自动加上.avi,.mj2,.mp4 或者.m4v的扩展名。
  • profile:单引号引用的字符串来指定创建的视频的类型。

具体例子:

writerObj=VideoWriter('test.mp4');  % 定义一个视频文件用来存动画
open(writerObj);                    % 打开视频文件
frame = getframe;            % 把图像存入视频文件中
frame.cdata = imresize(frame.cdata, [H W]); % 设置视频宽高:H为行数(高),W为列数(宽)
writeVideo(writerObj,frame); % 将帧写入视频
close(writerObj); % 关闭视频文件

参考:
https://blog.csdn.net/mingtian715/article/details/50555529
https://blog.csdn.net/qq_23097931/article/details/51108747
https://blog.csdn.net/iracer/article/details/48876473

背景差值法是一种简单而有效的视频目标检测方法,其基本原理是通过将当前图像与背景图像进行差分,得到运动目标区域。 以下是一个简单的Matlab代码实现背景差值法对视频中运动目标的检测输出结果的示例: ``` clear all;clc; % 读入视频文件 video = VideoReader('test.mp4'); % 获取背景图像 background = read(video, 1); % 将背景图像转换为灰度图像 background_gray = rgb2gray(background); % 逐处理视频文件 while hasFrame(video) % 读入当前图像 frame = readFrame(video); % 将当前图像转换为灰度图像 frame_gray = rgb2gray(frame); % 计算当前图像与背景图像的差分图像 diff = abs(frame_gray - background_gray); % 对差分图像进行阈值处理,得到二值化图像 threshold = 20; bin = diff > threshold; % 对二值化图像进行形态学处理,去除噪点和填充空洞 se = strel('disk', 5); bin = imopen(bin, se); bin = imclose(bin, se); bin = imfill(bin, 'holes'); % 在当前图像上显示检测结果 result = frame; result(repmat(~bin,[1 1 3])) = 0; imshow(result); end ``` 在上述代码中,我们首先读入视频文件并获取背景图像。然后,我们开始逐处理视频文件。对于每一图像,我们将其转换为灰度图像,并计算其与背景图像的差分图像。通过对差分图像进行阈值处理、形态学处理和填充空洞等操作,我们可以得到一个二值化的图像,其中白色区域表示运动目标区域。最后,我们在当前图像上显示检测结果,将运动目标区域用红色标出。 需要注意的是,这只是一个简单的示例代码,实际应用中还需要根据具体情况进行参数调整和优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值