Сделать фильм с pcolor без getframe

У меня есть симуляция в MATLAB, и я хочу сделать фильм из кадров. Здесь более 4000 кадров размером не менее 1600х1600. Каждый кадр представляет собой двумерную матрицу. Я могу визуализировать их с помощью pcolor и сделать фильм с помощью getframe. Но поскольку размер огромен, а симуляция выполняется всю ночь, у меня возникнет множество проблем с хранителями экрана и т. д. Есть ли лучший способ сделать это в MATLAB? Решения с другим программным обеспечением также в порядке.


person rowman    schedule 23.05.2013    source источник


Ответы (2)


Прямо перед тем, как рисовать картинку с помощью pcolor(), попробуйте создать невидимую фигуру с помощью h = figure('visible', 'off'); и с помощью addframe(avi_file, h); добавить кадр в avi, исходящий от невидимой фигуры. Более подробные обсуждения можно найти на странице Визуализация фигуры MATLAB в памяти

Обновление: кажется, что нет способа получить кадр с помощью getframe() внутри безголового Matlab, поэтому варианты с использованием VideoWriter и movie2avi не будут работать. Если кому-то это удалось, поправьте меня в комментариях.

person Bee    schedule 23.05.2013
comment
Удалена эта зачеркнутая часть ответа: ‹s›Вы можете запустить Matlab с параметром -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 и выполняет рендеринг в памяти, а не на диске, поэтому он достаточно быстрый.

person rowman    schedule 24.05.2013