У меня есть симуляция в MATLAB, и я хочу сделать фильм из кадров. Здесь более 4000 кадров размером не менее 1600х1600. Каждый кадр представляет собой двумерную матрицу. Я могу визуализировать их с помощью pcolor
и сделать фильм с помощью getframe
. Но поскольку размер огромен, а симуляция выполняется всю ночь, у меня возникнет множество проблем с хранителями экрана и т. д. Есть ли лучший способ сделать это в MATLAB? Решения с другим программным обеспечением также в порядке.
Сделать фильм с pcolor без getframe
Ответы (2)
Прямо перед тем, как рисовать картинку с помощью pcolor()
, попробуйте создать невидимую фигуру с помощью h = figure('visible', 'off');
и с помощью addframe(avi_file, h);
добавить кадр в avi, исходящий от невидимой фигуры. Более подробные обсуждения можно найти на странице Визуализация фигуры MATLAB в памяти
Обновление: кажется, что нет способа получить кадр с помощью getframe()
внутри безголового Matlab, поэтому варианты с использованием VideoWriter
и movie2avi
не будут работать. Если кому-то это удалось, поправьте меня в комментариях.
-noFigureWindows
для ночных прогонов и использовать getframe()
так же, как вы используете сейчас, или ‹/s›
- person Dennis Jaheruddin; 23.05.2013
Используя ссылку, указанную в ответе @Bee, и немного поработав, проблема решается следующим образом:
aviobj=VideoWriter(filename);
open(aviobj);
hFig=figure('Visible','Off');
for loop comes here
cla
%All Drawing stuff
img = hardcopy(hFig, '-dzbuffer', '-r0');
writeVideo(aviobj, im2frame(img));
end
close(aviobj)
Обратите внимание, что он использует VideoWriter
вместо устаревших avifile
и addframe
и выполняет рендеринг в памяти, а не на диске, поэтому он достаточно быстрый.