You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:30:58