fla*_*hon 6 video matlab animation
我试图通过循环遍历MATLAB中的帧来创建一部电影.
请参阅http://www.mathworks.com/help/techdoc/ref/movie.html上的mathworks.com文档,我设法为一个情节设置动画.但是,当我尝试将电影保存在avi文件中时会出现问题.
/sf/answers/562697831/中的avifile和VideoWriter方法都导致了相同的错误.
虽然动画运行正常,但保存的影片只包含一个固定的帧,有时屏幕截图包含我的后台Web浏览器的叠加层.
先感谢您.
下面是我使用的代码,avi上冻结的框架链接如下.
Z = peaks; surf(Z);
axis tight
set(gca,'nextplot','replacechildren');
vid = VideoWriter('myPeaks2.avi');
vid.Quality = 100;
vid.FrameRate = 15;
open(vid);
for k = 1:20
surf(sin(2*pi*k/20)*Z,Z)
writeVideo(vid, getframe(gcf));
end
close(vid);
winopen('myPeaks2.avi')
Run Code Online (Sandbox Code Playgroud)

我今天遇到了这个(好吧,一个密切相关的)问题.这个stackoverflow主题是顶级搜索引擎结果之一,所以我想我会为未来的搜索者提供更多信息.
我正在使用一个VideoWriter对象,并呼吁frame=getframe(fig_handle)将每个帧保存到视频中.在本主题的问题中,只保存了1帧.此外,可以通过它看到数字背后的背景,好像这个数字是部分透明的.
将渲染更改为画家或zbuffer工作.(set(gcf,'renderer','zbuffer')例如.)
我需要openGL渲染,因为电影使用了透明度.做这项工作的关键是使用
opengl('software')
Run Code Online (Sandbox Code Playgroud)
这避免了将图形发送到视频卡和从视频卡发送图形的问题(我不确定......它有效,我继续前进).
请尝试以下操作:
f = figure();
Z = peaks; surf(Z);
a = axes('Parent',f);
axis(a,'tight');
set(a,'nextplot','replacechildren');
vid = VideoWriter('myPeaks2.avi');
vid.Quality = 100;
vid.FrameRate = 15;
open(vid);
for k = 1:20
surf(a,sin(2*pi*k/20)*Z,Z)
writeVideo(vid, getframe(f));
end
close(vid);
winopen('myPeaks2.avi')
Run Code Online (Sandbox Code Playgroud)
它包含使用显式句柄而不是隐式句柄。Matlab 中造成了许多混乱,因为人们倾向于使用隐式的,比如“gcf”、“gca”,恕我直言,这些应该从语言中完全删除。