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

MATLAB Discussion :

Construire un fichier avi à partir d'images bmp [Débutant]


Sujet :

MATLAB

  1. #1
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut Construire un fichier avi à partir d'images bmp
    bonjour,

    je souhaite créer une fichier avi à partir d'une série d'images bmp 24 bits en 800x600.

    Voilà mon script :
    Code matlab : 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
     
    clear;
     
    cdd=pwd
    rep = 'C:\\MlabWork\\';
     
    nom = 'MesImages';
     
    repBMP = strcat(rep, 'bmp24\\',nom,'\\');
    aviObj = avifile(strcat(nom,'.avi'),'fps',24);
     
     
    extension = '*.bmp';
    chemin = fullfile(repBMP,extension);
    list = dir(chemin);
     
    for n = 1:numel(list)
     
        [pathstr, name, ext, versn] = fileparts(list(n).name);
     
        [img map]= imread(fullfile(repBMP,list(n).name), extension(3:end));
    %     RGB = ind2rgb(img, map);
    %     f = im2frame(RGB);
        f = im2frame(img);
        aviObj = addframe(aviObj, f);
     
    end
     
    aviObj = close(aviObj);

    Mais j'ai ces messages :
    Warning: The frame height has been padded to be a multiple of four as required by the specified codec.
    > In avifile.addframe at 166
    In BmpToAvi at 24

    Warning: The frame width has been padded to be a multiple of four as required by the specified codec.
    > In avifile.addframe at 172
    In BmpToAvi at 24
    Mes images ont bien des dimensions multiples de 4 puisqu'elles sont en 800x600
    De plus je n'arrive pas à lire avec le lecteur windows le fichier avi créé

    Où est mon erreur ?


    [edit]
    En regardant les propriétés de aviObj j'ai :
    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
    Adjustable parameters:
                   Fps: 24
           Compression: 'Indeo5'
               Quality: 75
        KeyFramePerSec: 2.1429
             VideoName: 'MesImages.avi'
    
    Automatically updated parameters:
            Filename: 'MesImages.avi'
         TotalFrames: 150
               Width: 804
              Height: 604
              Length: 0
           ImageType: 'Truecolor'
        CurrentState: 'Closed'
    [/edit]

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Tout d'abord :

    Citation Envoyé par Auteur Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rep = 'C:\\MlabWork\\';
     
    nom = 'MesImages';
     
    repBMP = strcat(rep, 'bmp24\\',nom,'\\');
    s'écrit plus proprement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rep = 'C:\MlabWork';
    nom = 'MesImages';
     
    repBMP = fullfile(rep, 'bmp24',nom);
    ensuite, pour ton problème de dimension, il suffit de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aviObj = addframe(aviObj(1:600,1:800), f);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aviObj = addframe(aviObj(5:end,5:end), f);
    Pour le reste, tu peux toujours spécifier un codec différent en modifiant l'argument compression de AVIFILE
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Citation Envoyé par Dut Voir le message
    Tout d'abord :


    s'écrit plus proprement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rep = 'C:\MlabWork';
    nom = 'MesImages';
     
    repBMP = fullfile(rep, 'bmp24',nom);
    Merci des réflexes C++


    Citation Envoyé par Dut Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aviObj = addframe(aviObj(5:end,5:end), f);
    je ne comprends pas cette ligne code ? "5:end" veut dire quoi ?

  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 302
    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 302
    Points : 52 884
    Points
    52 884
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Ok, merci

    Pour le codec il faut prendre 'Cinepack'.


    Par contre j'ai une erreur en faisant :
    Code matlab : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    aviObj = addframe(aviObj(1:600,1:800), f);

    ??? Error using ==> avifile.subsref
    AVIFILE objects only support structure subscripting.

    Error in ==> BmpToAvi at 28
    aviObj = addframe(aviObj(1:600,1:800), f);

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par Auteur Voir le message
    Par contre j'ai une erreur en faisant :
    Code matlab : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    aviObj = addframe(aviObj(1:600,1:800), f);
    Il fallait bien entendu lire :

    Code matlab : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    aviObj = addframe(aviObj,f(1:600,1:800));
    C'était un piège
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Citation Envoyé par Dut Voir le message
    C'était un piège
    je suis tombé dans le panneau

    Ceci dit c'est quand même faux

    C'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aviObj = addframe(aviObj, f.cdata(1:600,1:800,:));

    Ben oui f est de la forme
    f =

    cdata: [600x800x3 uint8]
    colormap: []

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Avi à partir d'images jpeg
    Par Ludo1919 dans le forum Images
    Réponses: 18
    Dernier message: 22/09/2010, 14h53
  2. Construire un fichier a partir de 2 requetes
    Par jacky2677 dans le forum Sql*Plus
    Réponses: 4
    Dernier message: 18/06/2009, 14h58
  3. Réponses: 1
    Dernier message: 16/12/2008, 18h42
  4. Créer un fichier avi à partir du flux video d'une webcam
    Par fred7163 dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/03/2007, 11h39
  5. Réponses: 3
    Dernier message: 24/02/2004, 15h09

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