
本篇文章讲述如何将多张图片转化为动图或视频。
一.图片转为GIF
效果图

一言以蔽之,对多张索引图像使用imwrite函数,即可得到GIF图像!
你需要解决两个问题:
①如何将RGB图像转化为索引图像 (答:用rgb2ind函数)
②如何使用imwrite函数(答:将多个图像添加到第一个图像中)
完整代码
x = 0:0.01:1;n = 0:0.2:3;nImages = length(n);fig=figure;filename = 'test1.gif';for idx = 1:nImagesy = x.^n(idx);plot(x,y,'LineWidth',3)title(['y = x^n, n = ' num2str( n(idx)) ])frame = getframe(fig);% getframe:捕获坐标区或图窗作为影片帧im = frame2im(frame);% frame2im:从单个影片帧 F 返回真彩色 (RGB) 图像[A,map] = rgb2ind(im,256);% rgb2ind:将 RGB 图像转换为索引图像if idx == 1% LoopCount:重复动画次数% DelayTime=1:每个动画图像的时滞为一秒imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',1);else% WriteMode=append:将多个图像添加到第一个图像中imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',1);endend
你可以通过help imwrite详细学习此内容!
二.图片转为Video
一言以蔽之,对多张RGB图像使用writeVideo函数,即可得到视频!
你需要解决两个问题:
①使用writeVideo函数写视频之前需要做哪些准备
(答:①创建VideoWriter对象 ②视频的属性设置 ③打开对象进行写入)
②writeVideo函数如何使用
完整代码
x = 0:0.01:1;n = 0:0.2:3;nImages = length(n);fig=figure;myVideo = VideoWriter('test1.avi');myVideo.FrameRate = 1; % 视频播放的速率open(myVideo); % 打开该对象以进行写入for idx = 1:nImages%% 1y = x.^n(idx);plot(x,y,'LineWidth',2)title(['y = x^n, n = ' num2str( n(idx)) ])%% 2frame = getframe(fig);writeVideo(myVideo,frame);endclose(myVideo);
你可以通过help writeVideo详细学习此内容!
三.Video转为GIF
一言以蔽之,获取视频中每一帧图片及视频速率,用imwrite写为动图
你需要解决以下3个问题
①如何获取每一帧图片(答:frame=read(V,i);)
②如何获取视频速率(答:Framerate=V.FrameRate; )
③imwrite如何使用
完整代码
[filename1, pathname1] = uigetfile({'*.mp4';'*.avi';'*.*'});V=VideoReader([pathname1,filename1]);filename='test2.gif';numFrames = V.NumFrames; % 获取视频帧的总数Framerate=V.FrameRate; % 获取视频帧率for i=1:numFramesframe=read(V,i);[A,map]=rgb2ind(frame,256);if i == 1imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',1/Framerate);elseimwrite(A,map,filename,'gif','WriteMode','append','DelayTime',1/Framerate);endend
参考:https://blog.csdn.net/qq_44770178/article/details/111836956
希望大家多多“点赞、在看、分享”~~



点个在看你最好看

文章转载自Matlab随笔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




