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

Python Discussion :

Programmation divers Python


Sujet :

Python

  1. #1
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 25
    Par défaut Programmation divers Python
    Bonsoir,

    J'ai quelques exercices d'informatique à faire, certains programmes fonctionnent, mais d'autres non.

    Comment pourrais-je vous envoyer par mail ce que j'ai fait ?

    En effet mon professeur fréquente ce forum...

    Merci pour l'aide !

  2. #2
    Membre expérimenté Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2016
    Messages : 159
    Par défaut
    bonsoir,

    Si tu as du codes qui ne fonctionne pas comme tu le veux, tu peux toujours le poster ici pour qu'on puisse t'aider.
    A moins que dans les consignes que le professeur t'ai donné il y ai de ne pas avoir une aide quelquonque je ne vois ou est le problème.

  3. #3
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 25
    Par défaut Re
    Non, il n'a pas dit que l'on n'avait pas le droit de solliciter de l'aide, mais je crains que s'il voit cela, j'ai une mauvaise note...

    Est-il possible de l'envoyer par mail à quelqu'un ? C'est assez rapide !

    Merci beaucoup.

  4. #4
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 25
    Par défaut Re
    Vous trouverez finalement l'énoncé, la fonction test, et ce que j'ai fait.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre expérimenté Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2016
    Messages : 159
    Par défaut
    Bonjour,
    je n'ai pas pu regarder tout le code mais:

    pour la rotation regarde bien le résultat attendu et le résultat que sort ta fonction rotation(image_tab).

    pour la dilation c'est le traitement sur image_tab qui ne fonctionne pas mais fonctionne apparement sur image_tab3pour l'érosion même problème cas que la dilation. donc à mon avis si tu résous le problème de la fonction dilation tu résoudras celui de la fonction erosion.

    tu peux voir la différence de résultat à l'aide de print() dans le fichier test.py et ainsi voir ce qui va pas.

  6. #6
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Pour la rotation, il y a 2 types d'erreurs fréquentes :
    - Oublier d'inverser la largeur et la hauteur (ou le faire 2 fois).
    - Mal placer les pixels : un petit dessin avec qqs exemples bien choisis permet de se faire une idée. Ensuite en affichant ces pixels (avec "print"), on peut vérifier que cela colle.
    Dernier conseil, appliquer la fonction sur une image ou la largeur vaut par exemple 2 fois la hauteur avec des choses bien distinctes aux 4 coins.

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 700
    Par défaut
    Salut,

    Citation Envoyé par inconnue058 Voir le message
    J'ai surtout des problèmes pour rotation : quand j'utilise le fichier "test" du professeur, cela me dit que le résultat obtenu n'est pas celui attendu, alors que quand je le teste, on a bien une rotation...
    image_tab_90degres[j, i, :] = image_tab[i, j, :] fabrique la transposée i.e. une symétrie sur la diagonale principale.
    Ça devrait se voir en regardant ce que çà donne avec une image avant/après la transformation.

    Après pour trouver ce qu'il faut faire, c'est juste prendre un simple tableau:
    et réfléchir à l'opération à effectuer pour obtenir:
    et non
    Pour le reste, c'est pareil, papier crayon pour visualiser l'opération à effectuer puis quand çà fonctionne sur des exemples simples, on peut s'aventurer à coder quelque chose...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 25
    Par défaut Re
    Bonsoir,

    Merci beaucoup pour vos réponses.

    J'ai réussi à régler le problème pour rotation, merci !

    Par contre, pourriez-vous me dire ce qui ne va pas pour dilatation et erosion svp ?

    Car là je ne vois pas du tout...

    Merci beaucoup pour l'aide !

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 700
    Par défaut
    Citation Envoyé par inconnue058 Voir le message
    Par contre, pourriez-vous me dire ce qui ne va pas pour dilatation et erosion svp ?
    En ce qui me concerne, je vous ai déjà indiqué quoi faire: réfléchir papier/crayon avant de coder, puis une fois que vous avez une idée vous la testez sur quelques exemples, puis vous codez et si çà ne fonctionne pas ben vous relisez votre code en essayant de comprendre pourquoi çà ne fonctionne pas.

    Relisez un peu çà:
    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
    def erosion(image_tab):
        image_tab2 = image_tab.copy()
        hauteur = len(image_tab)
        longueur = len(image_tab[0])
        for i in range(1,hauteur-1):
            for j in range(1,longueur-1):
                a=0
                voisins = [-1]*8
                c=0
                for i2 in range(3):
                    for j2 in range(3):
                        voisins[c] = image_tab2[i-1+i2 ,j-1+j2]
                if all(voisins):
                    image_tab2[i,j]=255
                else :
                    image_tab2[i,j]=0
        return image_tab2
    Si vous n'avez pas d'idées vous ajoutez des "print" pour vous assurez que l'état de vos différentes variables est cohérent avec ce que vous attendez.

    note: c'est en faisant ce boulot de mise au point que vous apprenez à programmer... Si vous ne le faites pas autant attendre la correction que vous donnera le prof.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 25
    Par défaut Re
    Merci beaucoup pour la réponse.

    Malheureusement, j'ai déjà fait depuis 1 mois ce genre de test, et je n'aboutis à rien, c'est pour erosion et pour dilatation que j'ai besoin d'aide, j'ai fait tout le reste tout seul...

    Pourriez-vous me corriger ce qui ne va pas svp ?

  11. #11
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 25
    Par défaut Re
    Voici plus précisément mon problème :

  12. #12
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 053
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    matimagegrise [i,j] = int (image_tab [i,j][0]/3 + image_tab [i,j][1]/3 + image_tab [i,j] [2]/3)
    Qu'est censé faire la fonction int ? et à quel type de variable python essayez-vous d'accéder avec vos index i et j ?

  13. #13
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 25
    Par défaut Re
    Merci pour la réponse.

    Int est censé retourner un entier.

    Par contre pour i et j ne vois pas où vous voulez en venir ?

  14. #14
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Désolé, mais je ne comprends déjà pas ce qu'est image_tab
    Pour ma part, je pars d'une image que j'ouvre, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from PIL import Image
    import numpy as np
    nom_image = "billes.jpg"
    mon_image = Image.open(nom_image)
    cont = contour(mon_image)
    dilat = dilatation(mon_image)
    cont.show()
    dilat.show()
    Si cela t'intéresse, j'ai un cours sur le traitement de l'image ici :
    http://obelix56.free.fr/spip.php?article55
    Par contre, c'est peut-être un tord, mais je n'ai pas effectué les traitements avec numpy mais directement sur les listes de listes de pixels. Je trouvais au moment de la conception que c'était plus facile à la compréhension.
    Comme le dit wiztricks, attends la correction. Le fait d'avoir cherché est déjà très formateur.

    Edit :
    J'imagine que c'est avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import numpy as np
    import imageio
    nom_image = "billes.jpg"
    mon_image = imageio.imread(nom_image)
    print(mon_image)

  15. #15
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 25
    Par défaut Re
    image_tab correspond à une image sous forme matricielle...

    Malheureusement je ne peux pas rendre mon devoir "en l'état", c'est interdit tant qu'il reste des erreurs "en rouge"...

    Voyez-vous comment enlever mon erreur ?

    Merci encore.

  16. #16
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 25
    Par défaut Re
    Voilà comment on utilise image_tab :

    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
    from PIL import Image
    import numpy as np
     
    nom = "image.jpg"
     
    image = Image.open(nom)
    image.show()
    image_tab = np.array(image)
     
    def niveaux_de_gris (image_tab):
        L = len(image_tab)
        C = len(image_tab[0])
        matimagegrise=np.zeros ((L,C),dtype=np.uint8)
        for i in range (L) :
            for j in range (C) :
                matimagegrise [i,j] = int (image_tab [i,j][0]/3 + image_tab [i,j][1]/3 + image_tab [i,j] [2]/3)
        return matimagegrise
     
    def dilatation(image_tab):
        image_tab2=niveaux_de_gris(image_tab2)
        hauteur , longueur  = image_tab3.shape
        for i in range(1,hauteur-1):
            for j in range(1,longueur-1):
                a=0
                voisins = [-1]*8
                c=0
                for i2 in range(3):
                    for j2 in range(3):
                       voisins[c] = image_tab2[i-1+i2 ,j-1+j2]
                if any(voisins): 
                    image_tab2[i,j]=255
                else :
                    image_tab2[i,j]=0
        return image_tab3
     
     
    image_tab2=dilatation(image_tab)
     
    nouvelle_image = Image.fromarray(image_tab2)
    nouvelle_image.show()
     
    nouvelle_image.save("nouveau_"+nom)
    Est-ce plus clair comme ça ?

  17. #17
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Citation Envoyé par inconnue058 Voir le message
    image_tab correspond à une image sous forme matricielle...

    Malheureusement je ne peux pas rendre mon devoir "en l'état", c'est interdit tant qu'il reste des erreurs "en rouge"...

    Voyez-vous comment enlever mon erreur ?

    Merci encore.
    Non, pas encore mais je ne vais pas traîner...
    Premier problème : ton image en niveaux de gris ne fonctionne pas.
    Voici une correction, cela pourra peut-être t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def niveaux_de_gris (image_tab):
        L = len(image_tab)
        C = len(image_tab[0])
        k=3
        matimagegrise=np.zeros ((L,C,k),dtype=np.uint8)
        for i in range (L) :
            for j in range (C) :
                matimagegrise [i,j] = int (image_tab [i,j][0]/3 + image_tab [i,j][1]/3 + image_tab [i,j] [2]/3)
        return matimagegrise
    J'ai supposé que tu avais cela pour l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    nom_image = "billes.jpg"
    mon_image = imageio.imread(nom_image)
    print(mon_image)
    nvg = niveaux_de_gris(mon_image)
    print(nvg)
    from matplotlib import pyplot as plt
    plt.imshow(nvg, interpolation='nearest')
    plt.show()

  18. #18
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 25
    Par défaut Re
    Merci beaucoup pour la réponse.

    J'ai modifié la fonction

  19. #19
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Voici pour terminer qqchose qui fonctionne mais je ne sais pas si c'est vraiment ce que tu attends. L'énoncé précise qu'il faut convertir l'image en niveaux de gris, c'est ce que j'ai fait au début de la fonction contour.
    Tu avais une grosse erreur je crois car tu avais un return de l'image initiale.
    Ce code fonctionne chez moi et il n'y a pas de raison que cela ne soit pas le cas chez toi.
    Comme tu peux le voir, je pars d'une image en "jpg" et celle-ci est en couleurs !
    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
    49
    50
    def contour(image_loc):
        image_loc=niveaux_de_gris(image_loc)
        L = len(image_loc)
        C = len(image_loc[0])
        m=3
        image_loc2=np.zeros ((L,C,m),dtype=np.uint8)
        for i in range (1,C-1):
            for j in range (1,L-1):
                somme = 0
                for i2 in range(3):
                    for j2 in range(3):
                        somme += image_loc[i-1+i2 ,j-1+j2]
                tmp =  8 * image_loc[i,j] - somme
                for k in range(len(tmp)):
                    if tmp[k]>255:
                        tmp[k]=255
                    elif tmp[k]<0:
                        tmp[k]=0
                image_loc2[i,j] =  tmp 
        return image_loc2
     
     
    def niveaux_de_gris (image_tab):
        L = len(image_tab)
        C = len(image_tab[0])
        m=3
        matimagegrise=np.zeros ((L,C,m),dtype=np.uint8)
        for i in range (L) :
            for j in range (C) :
                matimagegrise [i,j] = int (image_tab [i,j][0]/3 + image_tab [i,j][1]/3 + image_tab [i,j] [2]/3)
        return matimagegrise
     
     
    #from PIL import Image
    import numpy as np
    from PIL import Image
     
    nom_image = "billes.jpg"
    image = Image.open(nom_image)
    image.show()
    mon_image = np.array(image)
     
    nvg = niveaux_de_gris(mon_image)
    nouvelle_image = Image.fromarray(nvg)
    nouvelle_image.show()
     
    cont = contour(mon_image)
    nouvelle_image = Image.fromarray(cont)
    nouvelle_image.show()
    #dilat.show()
    Je ne pourrai pas t'aider plus, j'ai aussi du travail...
    Bon courage.

  20. #20
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 25
    Par défaut Re
    Merci infiniment !

    Maintenant, comment pourrais-je obtenir une fonction dilatation et une fonction erosion justes ?

Discussions similaires

  1. Meilleur livre pour apprendre à programmer en Python
    Par Guigui_ dans le forum Général Python
    Réponses: 56
    Dernier message: 13/02/2016, 00h31
  2. probleme en faisant un programme en python
    Par tozier_4 dans le forum Général Python
    Réponses: 3
    Dernier message: 18/04/2008, 12h54
  3. programmer en python sous windows avec emacs
    Par Mydriaze dans le forum Général Python
    Réponses: 5
    Dernier message: 24/09/2007, 22h01
  4. exécuter des programmes avec python
    Par piotrgavriloff dans le forum Général Python
    Réponses: 1
    Dernier message: 24/06/2007, 01h09
  5. Lire un programme en python, sans python
    Par Guigiz dans le forum Py2exe
    Réponses: 15
    Dernier message: 09/06/2006, 21h11

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