在for循环getframe问题。

8视图(30天)
迈克
迈克 2013年6月19日
我想动画图像并将其保存为gif文件。制作一个方程后,我在一个循环中使用imshow和getframe连续帧捕获,然后我再一个图像和转换成一个索引文件。我试过其他方法,但总是提出了同样的问题。甚至样品的峰值/冲浪的函数在Matlab的文档创建动画gif不输出正确的gif文件(这意味着它落后是因为重复帧)。
我的问题是,看似随机的时候,似乎getframe抓住了前一帧而不是目前的一个。这个问题不会发生在其他电脑我已经试过,所以我觉得这是一个问题,我的cpu和图形处理器之间的通信(Mac OSX 10.7.5, Macbook Pro w视网膜显示屏17”)。好像CPU处理图像的速度比GPU可以寄给我的显示器。任何见解这个理论是感激。我试着更新Java和Matlab (v.2012a)都无济于事。我也安装了OSX的最近更新,其中一个解决帧刷新率为视频游戏。
当我给电脑imshow和getframe操作之间的一段时间,现在“关闭”命令(请参见下面的代码),以便getframe不可能捕获错误的图像,gif出来。否则,我会重复帧的输出在imgur专辑(见图片)。我使用“关闭”的问题是它真的延长执行时间(约4 x)。
看到的: http://imgur.com/a/pWCE5 准确地理解我的意思。
我的下面的代码,可能产生期望的结果,没有大多数人的电脑上取消“关闭”。我意识到这是一个艰难的问题解决,因为它似乎是与我的GPU,但我不知要做什么……谢谢你的时间。
清晰的所有
抽搐
endloop = 26;
我= 1:endloop%定义下一个循环的高度值
如果我< (endloop / 2 + 2)
f (i) = 3 + i;
其他的
(我)= f(张)1;
结束
结束
(x, y) = meshgrid (256:255 256:255);%创建网格
z =√x ^ 2 + y ^ 2);%定义圆
k = 1: endloop
c = (z < f (k));
cf = fftshift (fft2 (c));%应用变换
fl =日志(1 + abs (cf));调频= max (fl (:));
imshow (im2uint8 (fl / fm));
帧= getframe;%关闭;
我= frame2im(框架);
[imind,地图]= rgb2ind (im, 256);
如果k = = 1
imwrite (imind,地图,“circle3.gif”,“延迟时间”,0.1,“LoopCount”、正);
其他的
imwrite (imind,地图,“circle3.gif”,“延迟时间”,0.1,“写模式”,“添加”);
结束
结束
关闭所有
toc

接受的答案

本Tordoff
本Tordoff 2013年6月20日
嗨,迈克,
你可以试着插入drawnow getframe”之前。这告诉所有MATLAB图形和事件来冲洗。有一些情况下,我发现一个“drawnow”(甚至多个“drawnow)刷新问题。
1评论
迈克
迈克 2013年6月20日
本,谢谢。,出色地完成工作。

登录置评。

更多的答案(0)

类别

找到更多的在动画帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!