IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Images Discussion :

Gif animé à partir d'une figure chargée


Sujet :

Images

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 52
    Points
    52
    Par défaut Gif animé à partir d'une figure chargée
    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:
    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
    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
    [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.

    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 !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Voir ce message

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 52
    Points
    52
    Par défaut
    Bonsoir, merci beacoup de votre réponse.

    Effectivement je vois que je ne suis pas la seule à avoir ce PB. Ajouter la ligne 'set(gcf, 'Renderer', 'painters');' effectivement règle le problème, mais comme dit dans le post, je perd le canal alpha, et donc la transparence que je voulais mettre à mon enveloppe 3D.

    J'ai l'impression qu'il n'y a guère de solution à ce problème Windows...

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 308
    Points : 52 892
    Points
    52 892
    Par défaut
    Au passage, je n'arrive pas à reproduire ce problème avec Windows 7 sur mon portable

    Que ce soit en utilisant la version d'OpenGL de la carte graphique Nvidia ou celle du chipset graphique HD3000 du processeur Intel (avec les drivers mis à jour dans les deux cas).

    Les drivers sont-ils à jour sur ta machine ?

    Pourrais-tu faire un essai, sans changer la propriété "Renderer" mais en utilisant la commande suivante au début de ton code :


Discussions similaires

  1. Parser du html à partir d'une url chargé
    Par Dynamès dans le forum Général Java
    Réponses: 0
    Dernier message: 11/06/2012, 11h03
  2. valeur à partir d'une figure
    Par maggie2008 dans le forum MATLAB
    Réponses: 1
    Dernier message: 04/06/2012, 16h39
  3. Créer .gif animé à partir d'une série d'images
    Par alex316 dans le forum Images
    Réponses: 24
    Dernier message: 01/03/2012, 18h01
  4. Débutant : Appel d'animations à partir d'une
    Par gb1963 dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 19/01/2009, 14h10
  5. GIF anime dans une JFrame
    Par BernardT dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 16/08/2005, 11h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo