使用MATLAB VideoWriter录制含子图的图窗动画时仅捕获单个子图的问题
解决MATLAB VideoWriter仅捕获单个子图的问题
嘿,我找到问题根源了!你的代码里getframe默认会捕获当前激活的坐标轴,而不是整个图窗——在你绘制完第二个子图后,它会成为当前活动轴,所以getframe只抓取了这一个子图的内容。要捕获整个图窗,你需要给getframe明确指定图窗对象作为参数。
下面是修改后的完整代码,已经帮你修复了问题:
clc clear % 建议加上.avi扩展名,让系统能正确识别文件类型 vidObj = VideoWriter('randdata.avi'); open(vidObj) % 把图窗对象存为变量,后续操作更明确 fig = figure(1); for i = 1:100 % 清空指定的图窗,避免残留内容 clf(fig) subplot(1,2,1) imagesc(rand(100)) subplot(1,2,2) imagesc(rand(100)) drawnow % 确保图窗内容完全渲染后再捕获 % 指定捕获整个图窗,而不是默认的当前坐标轴 CF = getframe(fig); writeVideo(vidObj,CF); end % 别忘了关闭VideoWriter,确保视频文件正确写入并保存 close(vidObj);
几个关键的修改说明:
- 将图窗对象赋值给
fig变量,后续的clf和getframe都针对这个图窗操作,避免歧义 getframe(fig)明确告诉MATLAB要捕获整个图窗的内容,而不是默认的当前坐标轴- 给视频文件名加上
.avi扩展名,避免系统无法识别文件格式 - 循环结束后添加
close(vidObj),确保视频流正确关闭,文件完整写入
另外给你个小优化建议:如果想让动画播放更流畅,可以在创建VideoWriter时指定帧率,比如:
vidObj = VideoWriter('randdata.avi','Motion JPEG AVI'); vidObj.FrameRate = 10; % 设置为10帧/秒,可根据需求调整
内容的提问来源于stack exchange,提问作者Mohammad Bazrafshan
相关产品推荐
相关产品推荐

