2

我正在尝试将循环中的图像写入 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 编写图像而不先显示?

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

谢谢,阿维拉姆

4

2 回答 2

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);
于 2013-03-03T09:30:56.057 回答
1

即使这不能回答您关于 VideoWriter 的问题,也可能会有所帮助。

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

于 2012-12-12T21:40:52.900 回答