MATLAB Создать фильм

** Я понял, как создать фильм, поэтому код был изменен, чтобы отразить правильный код на случай, если он пригодится кому-нибудь в будущем. Этот скрипт создает фильм карты eqdconic и сохраняет его в формате avi. Фильм будет длиться 1255 кадров. Он также рисует точку в определенной точке изображения, помещает изменяющийся заголовок в фильм, чтобы показать, в каком месяце он проходит, и имеет цветовую полосу с правой стороны.

Некоторые из используемых переменных были созданы в другом месте. Код для их создания был опущен для сокращения кода (и поскольку они не будут полезны никому, кроме меня).

% Create movie
    nFrames = 34; % Number of frames

for k = 1:nFrames
    % Eqdconic script    
    % Define figure and axes
    fg1 = figure(1);
    axesm('MapProjection','eqdconic', 'MapParallels', [], 'MapLatLimit',[-80 -59],'MapLonLimit',[190 251]) % 60-70S and 120-160W
    framem on; gridm on; mlabel on; plabel on; hold all;

    % Plot data
    frame = dataPoint_movie(:,:,k);
    image = contourfm(lat,lon,frame, 'LineStyle', 'none');

    hold on

    % Plot dot    
    plotm(-66.75,224,'k.','MarkerSize',30); 

    % Colorbar
    caxis([0 100]); 
    h = colorbar;
    ylabel(h,'Percent');

    % Title: Days 1:1258 inclusive. 20100101 to 20130611
    date = datenum(2009, 12, 31) + k; % Convert t into serial numbers
    str = datestr(date, 'mmm yyyy'); % Show in the format mmm yyyy so title changes only once a month
    title(str);

    mov(k) = getframe(gcf); % gca would give only the image. gcf places the title and other attributes on the movie.
end

close(gcf)

% % Save as AVI file 
movie2avi(mov, 'SeaIceConcentration.avi', 'compression', 'none', 'fps', 2); 

person SugaKookie    schedule 01.07.2013    source источник
comment
генерирует ли цикл for t = 1:12 график или просто пустую ось?   -  person Schorsch    schedule 01.07.2013
comment
Основываясь на getframe-документации, пробовали ли вы A(i) вместо A(:,:,i) ?   -  person Schorsch    schedule 01.07.2013
comment
Почему вы выполняете цикл от i=1:numframes, а затем для каждого i снова от t=1:1258?   -  person Schorsch    schedule 01.07.2013
comment
Только что попробовал А(i). Еще пустой сюжет. Я тестировал участок графика контура для 1 изображения за раз, и это работает. Так что я считаю, что это фильм, который не работает.   -  person SugaKookie    schedule 01.07.2013
comment
Зачем вам нужен цикл t? Если я вас правильно понял, ваши numframes равны количеству дней.   -  person Schorsch    schedule 01.07.2013
comment
Спасибо. Ты прав. Но теперь у меня есть изображение. Но вроде не играет. Вы считаете, что скорость неправильная? А может просто не работает.   -  person SugaKookie    schedule 01.07.2013
comment
Прочтите документацию по movie — скорость в кадрах в секунду является третьим входом. Второй вход — количество повторов.   -  person Schorsch    schedule 01.07.2013


Ответы (2)


Я предпочитаю экспортировать свои фильмы из Matlab в файл .avi.

перед циклом for инициализируйте свой фильм:

vidObj = VideoWriter('Movie.avi');
vidObj.FrameRate=23;
open(vidObj);

затем получите свой кадр в цикле for:

A = getframe;
writeVideo(vidObj,A);

(обратите внимание, я не сохраняю каждый кадр в матрице, поэтому A — это матрица MxN)

Затем напишите свой фильм после цикла for

 close(vidObj);

Фильм будет находиться в вашем текущем рабочем каталоге. Вы можете открыть с помощью quicktime или любого другого avi-плеера. Чтобы изменить частоту кадров (скорость) вашего фильма, отредактируйте вторую строку кода. 23 кадра в секунду — это хорошая плавная частота кадров для фильмов.

person mrsoltys    schedule 01.07.2013
comment
Я не хочу показаться язвительным, но это действительно разные вопросы, и цель этих форумов не в том, чтобы отлаживать ваш конкретный код. Чтобы узнать дату, попробуйте просмотреть эту запись. Для изменения размера фигуры вы можете сделать это с помощью команды set, как and-subaxis-doesnt-work/16922127#16922127">проиллюстрировано здесь. - person mrsoltys; 01.07.2013

Проверьте соответствие утверждений:

A = dataPoint(:,:,t);

и

A(i) = getframe;

А перезаписывается все время Так что вы в лучшем случае получите последний кадр.

person innoSPG    schedule 01.07.2013