我是MatLab的新手,所以提前道歉......奇怪的是,我没有在网上找到太多帮助。我想将时间序列图绘制为随着时间的推移显示窗口的电影。在给定的时刻,它显示了该时间点的情节以及前后几秒钟。
我尝试过此代码,其中之前已定义过data,sampRate等内容:
index = (1:nSamples)/sampRate + startTimeSec;
figure('name',fileName);
title('Seismic');
plot(index,data,'r*');
writerObj = VideoWriter('c:\temp\movie.avi');
open(writerObj);
fig = figure('name',fileName);
title('Seismic');
window = 200; %samples
for i=1:nSamples
first = max([i-window/2,1]);
last = min([i+window/2,nSamples]);
clf;
plot(index(first:last),data(first:last),'r*');
writeVideo(writerObj,getframe(fig));
end
close(writerObj);
它使用错误
轰炸了writeVideo使用capturescreen时出错
传递给getframe的矩形必须至少部分在屏幕上
getframe出错(第105行)
x=builtin('capturescreen', varargin{:});
PlotData出错(第60行)
writeVideo(writerObj,的getFrame(图));
我做错了什么?
答案 0 :(得分:0)
为什么需要clf命令? getframe的文档读取" getframe返回一个电影帧。框架是当前轴的快照。"你的clf命令摆脱了图中的轴,因此错误。删除clf,它应该工作!
答案 1 :(得分:0)
您已拨打figure
两次。第一次调用就足够了,所以摆脱这句话:
fig = figure('name', fileName);
另外,摆脱无关的clf
调用,因为你的绘图内容将在循环的每次迭代中被改变,因此在你把东西放入其中之前不需要清除当前的数字。我怀疑你的绘图框是在后台,在你将帧写入文件之前需要将它显示为焦点的当前帧。因此,尝试将帧置于焦点,然后调用writeVideo
。换句话说,使用以下修改的代码。在我改变的任何地方,我都发表了评论:
index = (1:nSamples)/sampRate + startTimeSec;
figure('name',fileName);
title('Seismic');
plot(index,data,'r*');
writerObj = VideoWriter('c:\temp\movie.avi');
open(writerObj);
%// Remove this
% fig = figure('name',fileName);
window = 200; %samples
for i=1:nSamples
first = max([i-window/2,1]);
last = min([i+window/2,nSamples]);
%// Remove this as well
% clf;
figure(1); %// Put frame in focus
plot(index(first:last),data(first:last),'r*');
%// Put title here
title('Seismic');
%// Change. Just using getframe by default
%// will call the current frame in focus
writeVideo(writerObj,getframe);
end
close(writerObj);