在Matlab中,将图像写入AVI而不使用VideoWriter显示

时间:2012-12-05 08:38:27

标签: matlab image-processing video-capture

我试图在循环中将图像写入AVI文件。现在,我正在使用VideoWriter和getframe来实现这一目标。代码通常是这样的:

FoodVideo = VideoWriter('tempp.avi');
FoodVideo.FrameRate = 25;
open(FoodVideo);
hh=figure('Visible','off');
for i=1:20
  imshow(example_image{i});
  hold on;
  text(100,100,sprintf('Frame Number: %d',i));
  hold off;
  currFrame = getframe(hh);
  writeVideo(FoodVideo,currFrame);
end
close(FoodVideo);

问题是getframe在写入之前会显示图像。 我无法想到将文本合并到图像数据中的方法,因此我消除了处理问题的方式(使用im2frame ...)。 我知道我可以使用avifile和addframe,但我想使用VideoWriter,因为matlab说avifile将被删除... 有没有办法使用VideoWriter编写图像而不先显示?

另一个相关问题: 当我运行我的代码时,似乎我捕获了我的屏幕而不是图形;我最近换了一台电脑,这开始只在新电脑上发生。有没有人知道为什么会这样?

谢谢, Aviram

2 个答案:

答案 0 :(得分:4)

经过一番搜索,我设法找到了解决方案。我正在使用硬拷贝功能将文本合并到图像数据中,然后使用im2frame我可以将其更改为适合与VideoWriter一起使用的格式。这看起来很完美:

      orig_mode = get(hfig, 'PaperPositionMode');
      set(hfig, 'PaperPositionMode', 'auto');
      cdata = hardcopy(hfig, '-Dzbuffer', '-r0');
      set(hfig, 'PaperPositionMode', orig_mode);
      currFrame = im2frame(cdata);

答案 1 :(得分:1)

即使没有回答关于VideoWriter的问题,也许它有帮助。

使用matlab创建视频时,我通常会导出一系列jpeg或png。我甚至没有在matlab中触摸视频功能。然后,我使用MEncoder(这是MPlayer项目的一部分)将图像系列转换为视频。通过这样做,您可以规避许多与matlab相关的问题并获得更好的视频文件。