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 :

Création des sous sequences vidéo


Sujet :

MATLAB

  1. #1
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut Création des sous sequences vidéo
    bonjour

    je dois créer des sous séquences-vidéo a partir d'une séquence vidéo. J'ai un tableau tab qui contient les 1ème images de chaque sous séquences.
    Mon problème c'est qu'il y a des chevauchements des images dans les sous séquences-vidéo obtenues.
    Les images ne sont pas comme j'ai initialisé dans le tab
    le code est très simple:
    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
    vid = 'D:\v1.avi';
    fileinfo = aviinfo(vid);
    numframes = fileinfo.NumFrames;
    tab = [1 61 101 numframes];
    filmavi1=mmreader(vid);
    nFrames= get(filmavi1,'numberOfFrames');
    vidHeight = filmavi1.Height;
    vidWidth = filmavi1.Width;
    i=1;
    while (tab(i+1)<=nFrames)
        p=tab(i);
        z=tab(i+1)-1;
        for  jj=p:(tab(i+1))-1
            % Preallocate movie structure.
            avi(p:z)= struct('cdata', zeros(vidHeight, vidWidth, 3, 'uint8'),'colormap', []);
     
            j=1;
            for k = p:z
                avi(j).cdata = read(filmavi1, k);
                j=j+1;
            end
        end
        m=[int2str(i),'.avi'];
     
        movie2avi(avi,m,'compression', 'indeo5','fps',25)
        i=i+1;
    end
    aidez-moi SVP

  2. #2
    Membre régulier
    Enseignant Chercheur
    Inscrit en
    Décembre 2011
    Messages
    172
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    bonjour
    je dois éclaircir mon problème pour trouver une réponse.

    J'ai une boucle qui permet de diviser une vidéo en des parties (sub vidèo) et les enregistrer.
    Mon problème c'est que lorsque j'enregistre une sub vidéo je remarque qu'il y a un chevauchement des images; parfois quelques images de la vidéo1 dans la partie enregistré de la vidéo 2.
    Est-ce que il y a un moyen de fermer l'avi créé pour qu'elle ne soit pas touchée ?
    Mon code le voila, j’espère trouver une aide
    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
    %nom c'est le nom  de fichier .avi a diviser
    for i=1:20
        vid=nom;
        fileinfo = aviinfo(vid);
        numframes = fileinfo.NumFrames;
        %Valeurs: contient le début et la fin de chaque sub vidéo de la vidéo courante.
        tab =Valeurs{i};
        filmavi1=mmreader(vid);
        vidHeight = filmavi1.Height;
        vidWidth = filmavi1.Width;
        for h=1:length(tab)-1
            nFr=tab(h+1)-tab(h);
            p=tab(h);
            z=tab(h+1)-1;
            % Preallocate movie structure.
            avi(1:nFr)= struct('cdata', zeros(vidHeight, vidWidth, 3, 'uint8'),'colormap', []);
            cpt=1;
            for k = p:z
                avi(cpt).cdata = read(filmavi1, k);
                cpt=cpt+1;
            end
            nomf=[filename,'-',int2str(h),'.avi'];
     
            if exist(['D:\' nomRep '\','dir'])~=7
                mkdir(['D:\\' nomRep '\' ]);
            end
            nom=['D:\sub-vid\' nomRep '\',nomf];
            %Decomposition en sub-vidéos:
            movie2avi(avi,nom,'compression', 'indeo5','fps',25)
        end
    end

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Il faut nettoyer la variable avi à chaque itération sur h.

    Prenons un exemple simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    S(1:2) = struct('a',1);
    ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >> S.a
     
    ans =
     
         1
     
     
    ans =
     
         1
    si on ne modifie que le second élément :
    on obtient bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >> S.a
     
    ans =
     
         1
     
     
    ans =
     
         2
    Maintenant si, comme dans ton code, on souhaitait réinitialiser directement la même structure S avec un seul élément :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    S(1:1) = struct('a',1);
    on obtiendrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >> S.a
     
    ans =
     
         1
     
     
    ans =
     
         2
    Le second élément n'est pas réinitialiser

    Il faut donc ajouter clear avi à la fin de chaque itération sur h dans ton code.

    Sinon, ton code est bien compliqué.
    Plus tu ajoutes de variables intermédiaires, moins ton code sera lisible .

    Voici une version allégée :
    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
    33
    for i=1:20
     
        vid = nom;
     
        filmavi1 = mmreader(vid);
     
        for h = 1:numel(Valeurs{i})-1
     
            nFr = Valeurs{i}(h+1)-Valeurs{i}(h);
     
            avi(1:nFr) = struct('cdata', zeros(filmavi1.Height, filmavi1.Width, 3, 'uint8'), 'colormap', []);
     
            cpt = 1;
            for k = Valeurs{i}(h):Valeurs{i}(h+1)
                avi(cpt).cdata = read(filmavi1, k);
                cpt = cpt+1;
            end
     
            nomf = sprintf('%s-%d.avi',filename,h);
     
            if exist(fullfile('D:',nomRep),'dir')~=7
                mkdir(fullfile('D:',nomRep));
            end
     
            nom = fullfile('D:\sub-vid', nomRep, nomf);
     
            movie2avi(avi, nom, 'compression', 'indeo5', 'fps', 25)
     
            clear avi
     
        end
     
    end
    Je n'ai pas tout optimisé car je me doute que ce n'est pas le code que tu utilises réellement.
    Je t'invite néanmoins à bien regarder chaque modification que j'ai apportée.

Discussions similaires

  1. Limitation à la création des sous-sites
    Par Davyd.B dans le forum SharePoint
    Réponses: 1
    Dernier message: 07/12/2008, 11h05
  2. [Dico/Théorie] Création des sous-rubriques
    Par SpiceGuid dans le forum Contribuez
    Réponses: 1
    Dernier message: 01/10/2008, 20h32

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