我想将一系列已知坐标作为线条绘制到已知宽度和高度的图形上。然后导入相同高度和宽度的.avi电影,然后将这两个组合起来,使线条覆盖视频。
我一直在寻找谷歌和stackoverflow,但不知道从哪里开始。任何指针都得到了很好的回应。我正在使用Matlab R2015a。
谢谢, 克里斯
答案 0 :(得分:0)
这是一种方法。代码被评论。我创建了一个虚拟电影,但如果你有一部电影,你可以跳过前几个步骤,如图所示。诀窍是使用hold on
和drawnow
来正确刷新显示。您可以添加更多行或修改您想要的任何内容。如果不清楚,请询问。
clear
clc
close all
%//================
%// Make video. If you already have one skip this step.
xyloObj = VideoReader('xylophone.mp4');
vidWidth = xyloObj.Width;
vidHeight = xyloObj.Height;
mov = struct('cdata',zeros(vidHeight,vidWidth,3,'uint8'),...
'colormap',[]);
%//================
hf = figure;
set(hf,'position',[150 150 vidWidth vidHeight]);
%// Read frames and put into structure to display in an axes.
k = 1;
while hasFrame(xyloObj)
mov(k).cdata = readFrame(xyloObj);
k = k+1;
end
%// For animated gif
filename = 'OverlayGif.gif';
NumFrames = k;
hold on
for n = 1:15
imshow(mov(n).cdata);
%// Add line. The drawnow is crucial.
line([round(vidWidth/4) round(3*vidWidth/4)],[round(vidHeight/2) round(vidHeight/2)],'Color',rand(1,3),'LineWidth',4)
drawnow
%// Make animated gif (for demo only. You don't need that).
frame = getframe(1);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
if n == 1;
imwrite(imind,cm,filename,'gif', 'Loopcount',inf);
else
imwrite(imind,cm,filename,'gif','WriteMode','append');
end
end
动画gif中的示例输出。您可以删除用于创建它的for
循环的结尾。
希望有所帮助!