scott198510 发表于 2011-5-31 23:51:29

生成avi文件

一个m文件运行时候动态显示图片,怎样使得程序循环完毕后生成对应的avi文件

messenger 发表于 2011-6-1 10:16:12

参考http://forum.simwe.com/thread-500384-1-1.html,不过不知道你为什么一定要生成avi文件

scott198510 发表于 2011-6-1 10:21:20

2# messenger

多谢斑竹关注,我是想把程序运行过程中整个动态的变化过程做成avi文件以后再转变成jif格式动画图片,后一步我有专门软件,主要是前一步生成avi文件 的问题

messenger 发表于 2011-6-1 10:26:15

在Matlab中直接生成gif动画更方便,在avi中转一下,反倒效果不好,参考http://forum.simwe.com/thread-880377-1-1.html。

scott198510 发表于 2011-6-25 11:40:28

本帖最后由 scott198510 于 2011-6-25 11:44 编辑

4# messenger

看了看版主给的例子,貌似和我这个不一样,比如我有下面这个程序,怎样在程序里面加上几行代码,使得程序运算完成后,把总的循环图像保存为一个avi格式的文件呢,比如我的程序循环步数是110,我想每隔10步存一次动画,最后生成的avi文件一共是11帧,好像说有个movie2avi函数可以直接生成,但是还是不得要领,哪位用过动画的提示一下:


clc;clear;close all;
set(gcf,'DoubleBuffer','on');
N=256; % 设置状态矩阵线元胞总数
t1=4;t2=6;
S=zeros(N); % S是状态矩阵
S(fix(29*N/59):fix(30*N/59),fix(29*N/59):fix(30*N/59))=1;
sum(S(:))
Ii=imshow(1-S,[]);
axis square; % 设置坐标轴属性
Sm=zeros(N+2); % 生成一个比状态矩阵多2行和2列的矩阵
for k=1:110;
    Sm(2:end-1,2:end-1)=S; % 把Sm中间NxN的部分赋值为状态矩阵S
    M=Sm(1:end-2,2:end-1)+Sm(3:end,2:end-1)+Sm(2:end-1,1:end-2)+Sm(2:end-1,3:end); % 计算4近邻之和
    S=mod(M,2); % 用模除得到下一时刻状态矩阵的数值
    set(Ii,'CData',1-S); % 更新显示的数据
    pause(0.2); % 暂停一下显示出动画效果
end

Pmaster 发表于 2011-6-25 20:51:06

很好啊,我也有这个问题,大家一起研究啊

scott198510 发表于 2011-6-26 20:49:56

6# Pmaster


呵呵 这麽淅沥的 问题还是自己搞定了:

clc;clear;close all;
set(gcf,'DoubleBuffer','on');
N=256; % 设置状态矩阵线元胞总数
t1=4;t2=6;
S=zeros(N); % S是状态矩阵
S(fix(29*N/59):fix(30*N/59),fix(29*N/59):fix(30*N/59))=1;
sum(S(:));
fh=figure;Ii=imshow(1-S,[]);
axis square; % 设置坐标轴属性
Sm=zeros(N+2); % 生成一个比状态矩阵多2行和2列的矩阵
ti=title('CAS=0', 'Fontsize',14,'Fontname','Times New Roman' );%显示标题
set(gcf,'Position',);
set(gcf,'DoubleBuffer','on');
set(gcf,'color','w')
for k=1:110;
    Sm(2:end-1,2:end-1)=S; % 把Sm中间NxN的部分赋值为状态矩阵S
    M=Sm(1:end-2,2:end-1)+Sm(3:end,2:end-1)+Sm(2:end-1,1:end-2)+Sm(2:end-1,3:end); % 计算4近邻之和
    S=mod(M,2); % 用模除得到下一时刻状态矩阵的数值
    set(Ii,'CData',1-S); % 更新显示的数据
    set(ti,'string',['CAS=',num2str(k)]);% 显示更新的CAS时间步数
    pause(0.2); % 暂停一下显示出动画效果
    Ma(k) = getframe(fh);
end
movie2avi(Ma,'dh.avi');

%%生成的动画avi文件 我转变为gif图片附上

JingheSu 发表于 2011-6-26 22:20:05

这个挺有意思的,不过直接gif不行么?

scott198510 发表于 2011-6-26 23:37:56

本帖最后由 scott198510 于 2011-6-27 20:12 编辑

8# JingheSu

直接 做成gif的我还没学会怎么用函数实现,而且上面这种movie2avi的做法对于循环次数太多时候貌似有问题,还要修改设置,还请斑竹现身大显神通改进改进上面部分

nwcwww 发表于 2011-6-27 21:59:56

按照你5L的程序和要求改的,每隔10步存一次。

clc;clear;close all;
aviobj = avifile('11111111.avi','compression','None','fps',5);
N=256; % 设置状态矩阵线元胞总数
t1=4;t2=6;
S=zeros(N); % S是状态矩阵
S(fix(29*N/59):fix(30*N/59),fix(29*N/59):fix(30*N/59))=1;
sum(S(:))
Ii=imshow(1-S,[]);
set(gcf,'DoubleBuffer','on');set(gcf,'color','w');set(gcf,'Position',);
ti=title('CAS=0', 'Fontsize',14,'Fontname','Times New Roman' );%显示标题
axis square; % 设置坐标轴属性
Sm=zeros(N+2); % 生成一个比状态矩阵多2行和2列的矩阵
for k=1:110;
    Sm(2:end-1,2:end-1)=S; % 把Sm中间NxN的部分赋值为状态矩阵S
    M=Sm(1:end-2,2:end-1)+Sm(3:end,2:end-1)+Sm(2:end-1,1:end-2)+Sm(2:end-1,3:end); % 计算4近邻之和
    S=mod(M,2); % 用模除得到下一时刻状态矩阵的数值
    set(Ii,'CData',1-S); % 更新显示的数据
    set(ti,'string',['CAS=',num2str(k)]);% 显示更新的CAS时间步数
    pause(0.02); % 暂停一下显示出动画效果
    if rem(k,10)==0 %每10步存1帧
      F=getframe(gcf,);aviobj=addframe(aviobj,F);
    end
end
aviobj=close(aviobj);

我试过把K值改大,没发现什么问题啊。

scott198510 发表于 2011-6-29 12:43:37

本帖最后由 scott198510 于 2011-6-29 13:07 编辑

按照你5L的程序和要求改的,每隔10步存一次。

nwcwww 发表于 2011-6-27 21:59 http://forum.simwe.com/images/common/back.gif
楼组你这个搞法还是有问题,我的程序运行过程中每一步动态显示一次图片,只是最后制作的avi文件需要每10步保存一次,但是现在运行时候都是每10步才显示一幅图片,这背离了要求(上述这个程序没有,换个程序就是这样了,楼组可以换个程序试试),而且有个问题就是,楼组实现的是抓屏幕,把程序部分都会抓进动画里面,不相关的东西都抓进动画里面,该什么改改呢?还有就是如果直接用movie2avi函数的话,实现5#要求怎么改进呢?个人感觉还是movie2avi更好

nwcwww 发表于 2011-6-29 22:08:58


楼组你这个搞法还是有问题,我的程序运行过程中每一步动态显示一次图片,只是最后制作的avi文件需要每10步保存一次,但是现在运行时候都是每10步才显示一幅图片,这背离了要求(上述这个程序没有,换个程序就是这样 ...
scott198510 发表于 2011-6-29 12:43 http://forum.simwe.com/images/common/back.gif

1。 我贴的代码确实是每一步显示一次图片的。rem(k,10)==0只影响到存入avi的命令,和画图无关。我不太理解你说的“换个程序试试”的意思,因为没见到你别的程序。
2。 如果需要换抓图的位置,改一下getframe的位置矩阵就行
3。 movie2avi本身其实就是call addframe来写入AVI啊。为什么这个函数对于本问题而言更好?非要用这个函数的话就按照你原来的做法再引入一个变量MA呗。
页: [1]
查看完整版本: 生成avi文件