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 :

Boucle modifiant le nom des images


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Homme Profil pro
    ingénieur optique / photonique
    Inscrit en
    Juin 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : ingénieur optique / photonique

    Informations forums :
    Inscription : Juin 2016
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Boucle modifiant le nom des images
    Bonjour à tous!

    Après avoir cherché un peu, tous les sujets qui traitaient plus ou moins de mon sujet étaient très spécifiques et ne m'ont donc pas apporté de réponse claire.

    Voilà, j'ai une liste de photos que je souhaite traiter par Matlab. J'ai écris mon code pour traiter une image et il fonctionne.
    Maintenant, je voudrais faire une boucle pour traiter toutes les images de mon dossiers de la même façon mais comme ce sont des images différentes donc leur nom diffère.
    Comment puis-je réaliser une boucle où à chaque tour, la variable modifierait juste le nom de mon fichier pour faire le même processus mais avec une image différente?

    Plus précisement, si mes images sont appelées: C:\Documents and Settings\Hilo\PFS\calibration 20160623\labtek eau\z1.bmp
    C:\Documents and Settings\Hilo\PFS\calibration 20160623\labtek eau\z2.bmp
    C:\Documents and Settings\Hilo\PFS\calibration 20160623\labtek eau\z3.bmp
    etc...
    Je veux une boucle for qui à chaque itération traite l'image z1 puis z2 puis z3 etc.

    Comme je ne sais pas le faire et que j'en ai déjà eu besoin, pour l'instant, je ne suis simplement amusé à toutes les écrire à la main. Et franchement ce n'est pas rigolo. Comme en plus ca ne donne pas quelque chose de joli à voir, je ne vous mets pas le code car il n'apporterait rien.

    Donc votre aide est la bienvenue!

    Merci pour vos réponses, j'espère avoir été clair

    Simon

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 25
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    % Nom du dossier
    o = 'C:\Documents and Settings\Hilo\PFS\calibration 20160623\labtek eau';
     
    % Recherche de tous les fichiers dans le dossier o
    oo=cd(o); 
    % suppression des éléments inintéressant
    Nom_image = oo(3:end,:);
    Sinon,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i =1:nombre
    string{i} = ['z' num2str(i)];
    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 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 165
    Points
    53 165
    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)

  4. #4
    Futur Membre du Club
    Homme Profil pro
    ingénieur optique / photonique
    Inscrit en
    Juin 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : ingénieur optique / photonique

    Informations forums :
    Inscription : Juin 2016
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup de vos réponses mais je n'arrive toujours à faire ce que je souhaite.

    J'ai chargé toutes mes images sous le nom imgX, X allant de 1 à 36 à la main car en réalité les noms de mes images est très mal choisi et je ne peux donc pas faire de boucle. La boucle que je veux faire est pour afficher toutes ces images qui ont des noms utilisables.

    Voilà comment j'ai utilisé votre aide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for s=1:36  
        img=sprintf('img%d',s);
        figure;
        imagesc(img); colorbar; colormap('jet');
    end
    Voilà comment je comprends mon code:
    img devient au fil de la boucle imgX
    et j'affiche chaque image (grâce à "imagesc") dans une nouvelle fenêtre (grâce à "figure").

    Mais quand je cherche à l'appliquer ça ne fonctionne pas car img n'est pas une variable mais une chaîne de caractère pour MATlab. Dans le workspace il m'indique: img --> value = 'img1', ce qui montre bien que c'est une chaine de caractère.

    Et quand j'applique la boucle, voilà le message d'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ??? Error using ==> image
    Error using ==> image
    Numeric or logical matrix required for image CData
     
    Error in ==> imagesc at 19
        hh = image(varargin{1},'CDataMapping','scaled');
    Ma question est donc: comment faire pour qu'il comprenne que img doit prendre les valeurs des variables et pas juste leur nom?

    Merci

    Simon

  5. #5
    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 165
    Points
    53 165
    Par défaut
    Citation Envoyé par cimon Voir le message
    J'ai chargé toutes mes images sous le nom imgX, X allant de 1 à 36 à la main car en réalité les noms de mes images est très mal choisi et je ne peux donc pas faire de boucle.
    Le plus simple aurait été de charger les images dans un tableau de cellules

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    img{1} = imread(...);
    img{2} = imread(...);
    img{3} = imread(...);
    ...
    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)

  6. #6
    Futur Membre du Club
    Homme Profil pro
    ingénieur optique / photonique
    Inscrit en
    Juin 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : ingénieur optique / photonique

    Informations forums :
    Inscription : Juin 2016
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Quand je dis que je les ai chargé à la main, c'est exactement ça que j'ai écris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    img1 = imread(...);
    img2 = imread(...);
    img3 = imread(...);
    ...
    Puis j'ai vu que toi tu mettais des parenthèses, ce qui m'évitais, dans mon sprintf, d'avoir "img" comme chaine de caractères. Mais quand je fais ça il ne charge même pas les images et me dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ??? Subscripted assignment dimension mismatch.
    En gros, ça ne fonctionne pas.

    Donc je ne vois toujours pas comment je peux faire pour que ma boucle d'affichage d'image fonctionne...
    Pour rappel, voilà mon code et il me dit que img est une chaine de caractère et qu'il ne peut donc pas appliquer imagesc dessus. Finalement ma question est: Comment faire pour lui dire que img est une image?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for s=1:36  
        img=sprintf('img%d',s);
        figure;
        imagesc(img); colorbar; colormap('jet');
    end
    Merci de votre aide

  7. #7
    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 165
    Points
    53 165
    Par défaut
    Citation Envoyé par cimon Voir le message
    Mais quand je fais ça il ne charge même pas les images et me dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ??? Subscripted assignment dimension mismatch.
    En gros, ça ne fonctionne pas.
    Pourrais-tu nous montrer le code que tu as écris ?

    Au passage, ce ne sont pas des parenthèses mais des crochets.
    Voir la FAQ : Tableaux de cellules (cell array)
    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)

  8. #8
    Futur Membre du Club
    Homme Profil pro
    ingénieur optique / photonique
    Inscrit en
    Juin 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : ingénieur optique / photonique

    Informations forums :
    Inscription : Juin 2016
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Voilà ce que j'ai fais
    J'ai essayé avec les crochets (merci pour la remarque ) mais ça ne fonctionne toujours pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    img{1} = imread('C:\Documents and Settings\Hilo\PFS\derive 20160628\z001.bmp');
    img{2} = imread('C:\Documents and Settings\Hilo\PFS\derive 20160628\z002.bmp');
    img{3} = imread('C:\Documents and Settings\Hilo\PFS\derive 20160628\z003.bmp');
    % ... jusqu'à 10 
     
    % Pour afficher toutes les images avec une boucle: 
    for s=1:10  
        img=img{s};
        figure;
        imagesc(img); colorbar; colormap('jet');
    end
    et le message d'erreur qui s'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ??? Cell contents reference from a non-cell array object.
    Il m'affiche la première image correctement mais il s'arrête là.

  9. #9
    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 165
    Points
    53 165
    Par défaut
    Attention tu utilises deux fois le nom img pour deux variables différentes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for s=1:10  
        img2 = img{s};
        figure;
        imagesc(img2); colorbar; colormap('jet');
    end
    Ce qui se simplifie en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for s = 1:10  
        figure;
        imagesc(img{s}); colorbar; colormap('jet');
    end
    Pour le nom des fichiers, tu peux faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    pathname = 'C:\Documents and Settings\Hilo\PFS\derive 20160628';
     
    for n = 1:10
        filename = sprintf('z%03d.bmp', n);
        img{n} = imread(fullfile(pathname, filename), 'bmp');
    end
    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)

  10. #10
    Futur Membre du Club
    Homme Profil pro
    ingénieur optique / photonique
    Inscrit en
    Juin 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : ingénieur optique / photonique

    Informations forums :
    Inscription : Juin 2016
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Génial, ca fonctionne parfaitement

    Juste, au cas où ce sujet servirait à quelqu'un d'autre, il y avait une petite coquille dans ton code pour le nom des fichiers:
    ligne 4 tu as mis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filename = sprintf('z%03d.bmp', n);
    Or mes fichier s'appellent: z00x Donc il eut fallut mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filename = sprintf('z00%d.bmp', n);
    Mais le problème est Résolu


    merci!

  11. #11
    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 165
    Points
    53 165
    Par défaut
    Citation Envoyé par cimon Voir le message
    il y avait une petite coquille dans ton code pour le nom des fichiers


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for n = 1:10
        filename = sprintf('z%03d.bmp', n)    
    end
    donne 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    filename =
     
    z001.bmp
     
     
    filename =
     
    z002.bmp
     
     
    filename =
     
    z003.bmp
     
     
    filename =
     
    z004.bmp
     
     
    filename =
     
    z005.bmp
     
     
    filename =
     
    z006.bmp
     
     
    filename =
     
    z007.bmp
     
     
    filename =
     
    z008.bmp
     
     
    filename =
     
    z009.bmp
     
     
    filename =
     
    z010.bmp
    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)

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

Discussions similaires

  1. [Débutant] boucle pour modifier et enregistrer des images
    Par Grichka146 dans le forum Images
    Réponses: 2
    Dernier message: 30/08/2011, 17h02
  2. Modifier les noms des champs sous VBA
    Par shadockgreg dans le forum Access
    Réponses: 2
    Dernier message: 22/09/2006, 17h50
  3. Réponses: 1
    Dernier message: 11/05/2006, 19h06
  4. [Import] Modifier le noms des tables
    Par ezdoor dans le forum Oracle
    Réponses: 5
    Dernier message: 27/01/2006, 18h24
  5. Modifier le nom des champs d'une table...
    Par Mr Capone dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/01/2005, 10h22

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