考慮這個例子:
%# lets create a 10-by-10 matrix, of values in the range [0,9]
M = fspecial('gaussian',10,2.5);
M = (M-min(M(:))) ./ range(M(:));
M = round(M*9);
%# prepare video output
vid = VideoWriter('vid.avi');
vidObj.Quality = 100;
vid.FrameRate = 5;
open(vid);
%# display matrix
h = imagesc(M);
axis square
caxis([0 10])
colormap(jet(10))
colorbar
%# capture frame
writeVideo(vid,getframe);
%# iterate changing matrix
for i=1:50
M = rem(M+1,10); %# circular increment
set(h, 'CData',M) %# update displayed matrix
writeVideo(vid,getframe); %# capture frame
drawnow %# force redisplay
end
%# close and save video output
close(vid);
您可以使用自定義顏色表,只需創建一個大小爲10×3的矩陣cmap
,每行包含RGB值並將其傳遞給呼叫colormap(cmap)
對於老版本的MATLAB比R2010b中,你可以使用avifile功能,而不是VideoWriter:
%# prepare video output
vid = avifile('vid.avi', 'fps',5, 'quality',100);
%# iterations
for i=1:50
%# ...
%# capture frame
vid = addframe(vid, getframe(gcf));
drawnow
end
%# close and save video output
vid = close(vid);
謝謝,我只是不明白你爲什麼這樣做:M =(M-分鐘(M(:)) )./範圍(M(:));當範圍(M(:))是1並且M-min(M(:))除以1時是相同的數字? – kojikurac
當我寫作時,怎麼會這樣:vid = VideoWriter('vid.avi'); matlab返回:??? 'char'類型的輸入參數未定義函數或方法'VideoWriter'? – kojikurac
@kojikurac:前三行只是爲了創建一個樣例矩陣,就像您所描述的那樣(包含從0到9的自然數)。這應該用您擁有的實際數據替換。另一方面,VideoWriter是在MATLAB R2010b中引入的。如果你有一箇舊版本,你可以使用舊的'avifile'功能。我更新答案以顯示如何使用此功能。 – Amro