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 :

Increment pour sauver des images


Sujet :

Images

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 55
    Points : 32
    Points
    32
    Par défaut Increment pour sauver des images
    Bonjour à tous!
    J'ai créé un script de mes propres petites main! Mais... ca fonctionne pas comme prévu
    En fait je cherche à appliquer une sorte de masque sur un groupe d'images dans 1 répertoire donné... ca fonctionne lorsque je teste cela sur une image, mais lorsque je met le programme dans les conditions réelles d'utilisation, il plante!
    Voici le script, puis le message d'erreur... si quelqu'un à une idée, merci par avance!
    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
    function outlines(filename, outlin)
     
    %Images location
    directory = 'C:\Program Files\MATLAB\R2006b\work\CSD\MoviesData\';
    fpath = [fullfile(directory,filename) 'CSD'];   
    imglist= dir(fullfile(fpath,'frame*.jpeg'));    
     
    A = imread([fullfile(directory,filename) 'CSD\',outlin]);  % load the source image
    [m,n] = size(A);  % size of the source image
     
    % Add structures outlines
    for k = 1:length(imglist);   % loop to read and apply for all the images in the folder
            B = imread([fpath '\' imglist(k).name]);  
            ImgNumb=1;
        for i=1:m
            for k=1:n
                if A(i,k)==0;   % Check black pixels in the source image
                    B(i,k,1)=0;   % Apply black color to the same pixels image by image
                    B(i,k,2)=0;
                    B(i,k,3)=0;
                elseif A(i,k)>0;
                end
            end
        end
        imwrite(B, [fullfile(directory,filename) 'CSD\',ImgNumb,'.jpeg']);  % create a new image (I don't know how to write on the same...?)
        ImgNumb=ImgNumb+1;   
    end
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ??? Error using ==> imwrite
    Can't open file "C:\Program Files\MATLAB\R2006b\work\CSD\MoviesData\240910_epil_mirroir_Ctrl_frontal_T10001_24.6s.txtCSD\.jpeg" for writing.
    You may not have write permission.
     
    Error in ==> outlines at 27
        imwrite(B, [fullfile(directory,filename) 'CSD\',ImgNumb,'.jpeg']);

  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 : 53 166
    Points
    53 166
    Par défaut
    La variable ImgNumb contient une valeur numérique.

    Il faut la convertir en chaine de caractères avant la concaténation dans le nom du fichier

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imwrite(B, [fullfile(directory,filename) 'CSD\',num2str(ImgNumb),'.jpeg']);
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    Merci, ok, je vois maintenant à quoi ça sert... cela ne plante plus par contre il s'arrête sans rien avoir fait! J'ai essayé d'utiliser l'outil de débogage et il n'a pas l'air d'entrer très loin dans la boucle. De plus, peu importe l'endroit ou je me place dans la boucle, il mentionne le numéro de ligne, avec en dessous : K>> j'ai beau valider... il réitère...!
    J'ai récupéré cette commande pour la lecture de toutes les image d'un répertoire sur un autre script mais effectivement , je ne sais pas et je n'ai pas trouvé à quoi correspond le "k". j'en apprend tous les jours ...merci

    PS (edit) : petite erreur... en fait il y a tout de même création de la première image... uniquement...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Salut,

    ton problème ne viendrait pas par hasard de l'utilisation de deux k différent ?

    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
    for k = 1:length(imglist);   % loop to read and apply for all the images in the folder
            B = imread([fpath '\' imglist(k).name]);  
            ImgNumb=1;
        for i=1:m
            for k=1:n
                if A(i,k)==0;   % Check black pixels in the source image
                    B(i,k,1)=0;   % Apply black color to the same pixels image by image
                    B(i,k,2)=0;
                    B(i,k,3)=0;
                elseif A(i,k)>0;
                end
            end
        end
        imwrite(B, [fullfile(directory,filename) 'CSD\',ImgNumb,'.jpeg']);  % create a new image (I don't know how to write on the same...?)
        ImgNumb=ImgNumb+1;   
    end
    Essaye en changeant le nom d'une des variables de boucles.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    Merci..., j'ai déjà tenté sans succès.
    j'avais fait ça (et ça fonctionnait toujours pareil, une image sur tout le répertoire) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for k = 1:length(imglist);
            B = imread([fpath '\' imglist(k).name]);  
            ImgNumb=1;
        for i=1:m
            for s=1:n
                if A(i,s)==0;
                    B(i,s,1)=0;
                    B(i,s,2)=0;
                    B(i,s,3)=0;
                elseif A(i,s)>0;
                end
    Là je sèche complètement... et ne vois pas pourquoi il s'arrête au terme de la première boucle, ce qui est sur en plus c'est qu'il va au moins jusqu'au eleseif et sans erreur... car mon image est telle qu'elle doit l'être. Si quelqu'un à une idée... je suis preneur!

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Salut,

    c'est l'initialisation de ImgNumb qui pose problème : tu l'initialises et tu l'incrémentes dans la même boucle! (donc ImgNumb vaut toujours 1).

    Il faut le sortir de ta boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ImgNumb=1;
    for k = 1:length(imglist);
    ...
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    Effectivement... c'est idiot... et ça fonctionne beaucoup mieux maintenant!
    Merci !

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

Discussions similaires

  1. Problèmes pour sauver des caractères dans un input
    Par kalash_jako dans le forum Langage
    Réponses: 3
    Dernier message: 23/04/2006, 21h10
  2. [Image]Alternative à GD pour superposer des images
    Par Invité4 dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 14/01/2006, 18h13
  3. [MySQL] conseils pour gérer des images avec mysql
    Par briiice dans le forum Administration
    Réponses: 9
    Dernier message: 04/01/2006, 09h52
  4. [Recherche] Recherche un logiciel pour assembler des images
    Par Furius dans le forum Autres Logiciels
    Réponses: 6
    Dernier message: 29/12/2005, 18h03
  5. [Persistance]Aide pour sauver des données en XML
    Par le Daoud dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 21/06/2005, 13h39

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