Bonjour à tous,
A la fin de mon traitement d'image, je voulais faire tourner ma figure 3D et enregistrer les vues succesives dans un gif.
J'ai vu comment se servir de imwrite sur le net et voici un petit exemple qui marche bien:
A partir de là, j'ouvre l'image .fig qui m'intéresse (c'est vrai qu'elle comporte beacoup de points) et j'applique la fin de ce petit code qui a montré ses preuves:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 video_filename='Video'; gif_fps=24; t = 0:pi/50:10*pi; plot3(sin(t),cos(t),t) xlabel('sin(t)') ylabel('cos(t)') zlabel('t') grid on axis square [az,el] = view; rots = 0:10:360; for i = 1:36 view(rots(i),el); axis off; axis vis3d; %pour garder la même échelle de l'objet, même en tournant %saveas(gcf,['Angle' num2str(rots(i))],'png'); % Take a "screenshot" of the figure fh frame = getframe(1); % Turn screenshot into image im = frame2im(frame); % Turn image into indexed image (the gif format needs this) [imind,cm] = rgb2ind(im,256); % If first loop iteration: Create the file, else append to it if i == 1; imwrite(imind,cm,video_filename,'gif', 'Loopcount',inf); else imwrite(imind,cm,video_filename,'gif','WriteMode','append','DelayTime',1/gif_fps); end end
Mais voilà que le gif que j'obtiens ne donne qu'une vue fixe de la première orientation, alors que la boucle est bien parcourue dans son ensemble.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 [az,el] = view; rots = 0:10:360; for i = 1:36 view(rots(i),el); axis off; axis vis3d; %pour garder la même échelle de l'objet, même en tournant %saveas(gcf,['Angle' num2str(rots(i))],'png'); % Take a "screenshot" of the figure fh frame = getframe(1); % Turn screenshot into image im = frame2im(frame); % Turn image into indexed image (the gif format needs this) [imind,cm] = rgb2ind(im,256); % If first loop iteration: Create the file, else append to it if i == 1; imwrite(imind,cm,video_filename,'gif', 'Loopcount',inf); else imwrite(imind,cm,video_filename,'gif','WriteMode','append','DelayTime',1/gif_fps); end end
Pourquoi d'après vous cela ne fonctionne pas ? Voici l'image .fig de ce que je traite. C'est une image avec triangulation et beaucoup de points. Voici mon fichier .fig:
https://www.wetransfer.com/downloads...0162905/168013
Merci du coup de main !
Partager