Matlab 导出视频和GIF动图

前言

接上篇文章,链接: matlab 绘制三阶魔方-动态变化,需要将魔方的动态变化转换为视频或动图表示出来,因此写了代码,目前还是小白,有不对的地方欢迎指出,大家一起学习。

导出视频

首先进行初始化:

 aviobj=VideoWriter('example.avi');
 aviobj.FrameRate=30;%set FrameRate before open it
 open(aviobj);
 j=1;

在进行魔方动态显示时的循环中,将图片提取出来,存入video中

 MOV =getframe(gcf);
writeVideo(aviobj, MOV);
 j=j+1;

最后,需要在循环外关闭 aviobj 。下面是执行魔方操作和显示魔方实时位置的代码,showcube(H, axisBlock, concerBlock, edgeBlock, …
blockVertices, blockFace, color, colorAlpha)
为显示图像操作,提取该图像存入预先建立的视频中。

for k = 1:optNum
        for i =1:9
	    % 执行
            [blockIdx, axisBlock, concerBlock, edgeBlock] = operation(optIdx(k), blockIdx, axisBlock, concerBlock, edgeBlock);
            % 显示
            showcube(H, axisBlock, concerBlock, edgeBlock, ...
                blockVertices, blockFace, color, colorAlpha)
             %转为视频
            MOV =getframe(gcf);
            writeVideo(aviobj, MOV);
            j=j+1;
            pause(0.1)

        end
end

       close(aviobj) 

其他情况时,可以在自己的图像绘制的循环中使用,将Figure 图像转换为视频输出。

导出GIF

首先,初始化

 pic_num=1;

同样在图像绘制的循环中加入代码:

            F=getframe(gcf);
            I=frame2im(F);
            [I,map]=rgb2ind(I,256);
            if pic_num==1  
            imwrite(I,map,'test.gif','gif','Loopcount',inf,'DelayTime',0.2);
            elseif mod(pic_num,3)==1
                imwrite(I,map,'test.gif','gif','WriteMode','append','DelayTime',0.2);
            end
            pic_num = pic_num + 1;

最终代码为:

for k = 1:optNum
        for i =1:9
	    % 执行
            [blockIdx, axisBlock, concerBlock, edgeBlock] = operation(optIdx(k), blockIdx, axisBlock, concerBlock, edgeBlock);
            % 显示
            showcube(H, axisBlock, concerBlock, edgeBlock, ...
                blockVertices, blockFace, color, colorAlpha)
%             MOV =getframe(gcf);
%             writeVideo(aviobj, MOV);
%             j=j+1;
            pause(0.1)

            F=getframe(gcf);
            I=frame2im(F);
            [I,map]=rgb2ind(I,256);
            if pic_num==1
                imwrite(I,map,'test.gif','gif','Loopcount',inf,'DelayTime',0.2);
            elseif mod(pic_num,3)==1
                imwrite(I,map,'test.gif','gif','WriteMode','append','DelayTime',0.2);
            end
            pic_num = pic_num + 1;

        end
end
% 
%  close(aviobj) 

就可以实现Matlab 导出视频和GIF动图了。

在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值