基于Matlab的简单视频处理
前言:这次分享是在数字图像处理课程中学到的简单视频处理,具体包括:读取视频文件,显示并逐帧保存;将图像文件转化成视频文件;合并两份视频文件。
1.读取视频文件,显示并逐帧保存
1.1源代码
源代码中提供了两种读取视频文件的格式。
%(1)读取avi视频文件,并逐帧显示后逐帧保存
% video = VideoReader('C:\Users\林露露\Desktop\数字图像处理\数字图像学习\简单视频处理\cba.avi');
% numframe = video.NumberOfFrames;%帧的总数
% for i = 1:numframe
% frame = read(video,i);%读取第i帧
% imshow(frame);%逐帧显示
% imwrite(frame,strcat('C:\Users\林露露\Desktop\数字图像处理\数字图像学习\简单视频处理\cba图像逐帧存储\',num2str(i),'.jpg'),'jpg');
% end%(2)这是另外一种格式读取,存储视频文件
file_path = 'C:\Users\林露露\Desktop\数字图像处理\数字图像学习\简单视频处理\';
obj1 = VideoReader(strcat(file_path,'abc','.avi')); %读入视频abc
obj1_numFrames = obj1.NumberOfFrames; % 视频abc帧的总数
for k = 1:obj1_numFramesframe = read(obj1,k); %读取第k帧imshow(frame); %显示第k帧store_path = strcat(file_path,'abc图像逐帧存储\',num2str(k),'.jpg'); % 第k帧图片的地址imwrite(frame,store_path); % 保存帧
end
1.2VideoReader对象的属性介绍
Properties:
% Name - Name of the file to be read.
% Path - Path of the file to be read.
% Duration - Total length of file in seconds.
% CurrentTime - Location from the start of the file of the current
% frame to be read in seconds.
% Tag - Generic string for the user to set.
% UserData - Generic field for any user-defined data.
%
% Height - Height of the video frame in pixels.
% Width - Width of the video frame in pixels.
% BitsPerPixel - Bits per pixel of the video data.
% VideoFormat - Video format as it is represented in MATLAB.
% FrameRate - Frame rate of the video in frames per second.
%
1.3原视频文件
原视频文件链接:https://v.qq.com/x/page/r3203ex4w7o.html
1.4运行结果部分截图
图示1:逐帧保存后的文件夹
图示2:逐帧保存的部分图像文件
2.将图像文件转化成视频文件
Matlab中将图像文件转化成一个视频文件,要注意原图像文件夹中的图像要保持所有图像的像素值一致,否则Matlab就会以文件夹中的第一个图像的像素作为转化后视频文件的默认帧像素值,并以此选择图像文件夹中的图像加入到视频文件中。
2.1源代码
主文件代码:
%注意文件夹中的图像像素必须都相同,即writeVideo函数以第一张图像的像素作为最终动画的帧像素
%例如文件夹中第一张图像像素是1440 * 1080,那么可以利用“画图”重新调整图像像素
ImagePath = 'C:\Users\林露露\Desktop\数字图像处理\数字图像学习\简单视频处理\海洋馆\';
VideoPath = 'C:\Users\林露露\Desktop\数字图像处理\数字图像学习\简单视频处理\Aquarium.avi';WriteImagesToAvi(ImagePath,VideoPath);
自定义函数文件代码:
%VideoWrite函数将根据profile 的设置来自动加上.avi,.mj2,.mp4 或者.m4v的扩展名,
% 如果没有设置profile的值,VideoWrite函数默认保存为.avi文件
function [] = WriteImagesToAvi(ImagPath,AviPath)
myobj = VideoWriter(AviPath); %初始化avi文件
myobj.FrameRate = 5;%VideoWriter(filename,profile),profile视频文件的属性
open(myobj);
[files] = dir(strcat(ImagPath,'*.jpg'));
numfiles = length(files);
for i = 1:numfiles%图像序列个数fname = strcat(ImagPath,files(i).name);frame = imread(fname);writeVideo(myobj,frame);
end
close(myobj);
end
2.2转化后的视频文件
转化后的视频文件链接:https://v.qq.com/x/page/q3203hhbfmy.html
3.合并两份视频文件
将两份视频文件合并的整体思路就是以一份视频文件为母版,然后逐帧将另一份视频文件显示到第一份视频文件的适当位置。
3.1源代码
obj1 = VideoReader('C:\Users\林露露\Desktop\数字图像处理\数字图像学习\简单视频处理\abc.avi');
framenum = obj1.NumberOfFrame();%总的帧数
obj2 = VideoReader('C:\Users\林露露\Desktop\数字图像处理\数字图像学习\简单视频处理\cba.avi');
for i = 1:framenumframe1 = read(obj1,i);frame2 = read(obj2,2);ind = find(frame1 > 100);%找到图像frame1中像素值大于100的点,返回它的索引值(即它在矩阵中的次序,按列优先遍历)[rows,cols,clrs] = ind2sub(size(frame1),ind);%将其索引值转化为rowsNew = rows + 200;colsNew = cols + 300;indNew = sub2ind(size(frame2),rowsNew,colsNew,clrs);frame2(indNew) = frame1(ind);imshow(frame2);%显示帧图像
end
3.2视频文件
第一份视频文件链接:https://v.qq.com/x/page/r3203ex4w7o.html
第二份视频文件链接:https://v.qq.com/x/page/q3203hhbfmy.html
4.总结
从这次基于Matlab简单图像的处理中,我感觉最大的收获莫过于了解并初步掌握了将一份图像文件转化成视频文件了,这提供了我一种将生活中的照片合成一份视频的方法,还是蛮有趣的。由于作者涉足此领域尚浅,文章中若有错误,不足,还请不吝赐教,非常感谢!
基于Matlab的简单视频处理相关推荐
- 基于MATLAB的简单手势识别
匆匆在看完了MOOC的<数字图像处理>,为了巩固所学,做了一个简单的手势识别(只能识别手势1.2.3)! 0.安装硬件支持包软硬件安装 0.1.MATLAB R2021b安装 软件包下载地 ...
- 【CV/Matlab系列】基于matlab GUI的视频监控界面
DATE: 2020.10.18 updated at 2022.04.23: 界面上增加报警提示功能 文章目录 1.前言 2.视频监控界面 2.1.初始化界面 2.2.人脸检测和计数功能 2.3.监 ...
- matlab fdatool陷波器,基于MATLAB的简单50Hz数字陷波器.doc
基于MATLAB的简单50Hz数字陷波器 摘要:陷波器是一个二阶滤波器,它的幅度特性在ω=±ω0处为零,在其他频率上接近常数,是一个滤波单频干扰的滤波器.一般仪器都用50Hz的交流电源供电,因而信号中 ...
- 基于matlab的数字下变频器的设计与仿真应用,基于matlab的简单数字下变频器的设计...
一.课程设计问题的提出: 试设计一数字下变频器,并用matlab 仿真: 二.二.解决问题的原理.技术方案解决问题的原理.技术方案解决问题的原理.技术方案以及以及matlab 验证验证: :数字下变频 ...
- 基于opencv的简单视频处理类示例
#include "opencv2/opencv.hpp" using namespace std; using namespace cv; class VideoProcesso ...
- 基于MATLAB实现简单人工神经网络
资源下载地址:https://download.csdn.net/download/sheziqiong/85979688 资源下载地址:https://download.csdn.net/downl ...
- android基于ffmpeg的简单视频播发器 跳到指定帧 av_seek_frame()
跳到指定帧,在ffmpeg使用av_seek_frame()进行跳转,这个函数只能跳到关键帧,所以对关键帧时间差距比较大的视频很尴尬,总是不能调到想要的画面 还有av_seek_frame中的时间参数 ...
- 基于matlab的简单的寻找波峰波谷处理方法
[plain] view plain copy clc; close all; clear; % 节点信息 data=[105.03 99.18 84.965 72.445 68.994 77.265 ...
- 基于MATLAB的视频运动目标检测识别
一.课题介绍 视频图像处理技术广泛用于工业.安全.医疗.管理等领域.运动目标的检测和跟踪是图像处理技术在视频序列图像处理方面的一个重要应用,在航天.交通.机器人视觉.视频监控.公共场所客流数据监测等场 ...
- 用matlab编程简单电子琴,基于MATLAB的数字信号发生器及简易电子琴设计论文.doc...
基于MATLAB的数字信号发生器及简易电子琴设计论文 基于MATLAB的数字信号发生器及简易电子琴设计 摘 要 数字信号发生器是一种基于软硬件结合实现的函数波形产生仪器.在工程实践中需要检测和分析的各 ...
最新文章
- iOS OpenCV 图像灰度处理
- Spring Boot 极简集成 Shiro
- 极客新闻——05、如何在工作中学习和成长?
- OSChina 周六乱弹 —— 老用户与狗
- SSH与SSM的区别以及相关技术的流行度
- vim自定义语法高亮(syntax highlight)设置流程
- 7000字整理: 全网最详细Pandas合并数据集操作总结
- JavaScript学习(三十二)— Keycode常用键位码对照表
- JSLite 的目标:缩小体积,做到 jQuery-free
- python标准正态分布表(scipy.stats)
- Python实现读写txt文件的方法
- matlab 仿真 毕业设计,毕业设计matlab仿真
- SQLite3:对SQLite3加密
- No plugin found for prefix 'mybatis-generator' in the current project ORA-28040: No matching authen
- 进项税额和销项税额介绍
- H3C设备组网故障之广播风暴篇
- c语言混沌序列,基于混沌序列的数据加密算法
- c语言编程文章排版,一种简单英文词典排版系统的实现 C语言编程
- 郭天祥写的《我的大学》
- 解决linux对D盘(非系统盘)只有只读权限,无法创建文件夹 (linux 重新挂载盘符)