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 :

Comparaison Image Python [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Par défaut Comparaison Image Python
    Bonjour,

    J'ai ce code

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    from tkinter import *
    import tkinter.messagebox
    import tkinter.filedialog
    from PIL import Image
    import sys, os
     
     
    def Ouvrir():
        filename = tkinter.filedialog.askopenfilename(title="Ouvrir une image",filetypes=[('all files','.*')])
        print(filename)
     
        photo = PhotoImage(file=filename)
        gifdict[filename] = photo
        print(gifdict)
     
        Canevas.create_image(0,0,anchor=NW,image=photo)
        Canevas.config(height=photo.height(),width=photo.width())
     
        fenetre.title("Image "+str(photo.width())+" x "+str(photo.height()))
     
    def Fermer():
        Canevas.delete(ALL)
        fenetre.title("Comparate PlateNumber")
     
    def compare(file1, file2):
        image1 = Image.open(file1)
        image2 = Image.open(file2)
        h1 = image1.histogram()
        h2 = image2.histogram()
        rms = math.sqrt(reduce(operator.add,
                               map(lambda a,b: (a-b)**2, h1, h2))/len(h1))
        return rms
     
     
     
    fenetre = Tk()
    fenetre.title("Image")
     
    menubar = Menu(fenetre)
     
     
     
    menufichier = Menu(menubar,tearoff=0)
    menufichier.add_command(label="Ouvrir une image",command=Ouvrir)
    menufichier.add_command(label="Fermer l'image",command=Fermer)
    menufichier.add_command(label="Quitter",command=fenetre.destroy)
    menubar.add_cascade(label="Fichier", menu=menufichier)
    fenetre.config(menu=menubar)
     
    label = Label(fenetre, text="Plaque Auto")
    label.pack()
    bouton = Checkbutton(fenetre, text="Luigi")
    bouton.pack()
    bouton = Checkbutton(fenetre, text="Corentin")
    Button(fenetre, text = 'Comparer', command=compare("img1.png",)?).pack(side=LEFT, padx=5, pady=5)
    bouton.pack()
     
    photo = PhotoImage(file="img1.png")
    zone_dessin = canvas = Canvas(fenetre,width=600, height=150, borderwidth=8)
    zone_dessin.create_image(300,65,image=photo)
    canvas.pack()
     
    Canevas = Canvas(fenetre)
    Canevas.pack(padx=5,pady=5)
     
    gifdict={}
    fenetre.mainloop()
    Je n'arrive pas à récupérer le fichier que j'ouvre pour pouvoir le comparer avec l'autre.
    Je ne sais pas comment définir l'image ouverte en tant que paramètre de la fonction compare.
    Pourriez-vous m'aidez ?

  2. #2
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Voir https://python.developpez.com/faq/?p...ee-a-un-Button pour la command du button.

    En ce qui concerne la transmission, le plus simple pour le moment serait de passer le chemin du fichier dans une variable globale dans ta fonction ouvrir, et de ne pouvoir utiliser le bouton que lorsque cette variable contient quelque chose.

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 714
    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 714
    Par défaut
    Salut,

    Ouvrir et comparer sont des (sortes de) fonctions.
    Lorsqu'Ouvrir se termine, la variable filename est détruite (et inaccessible à compare): il faut en faire une variable globale.
    A partir de là, çà ne sert à rien de vouloir passer çà en "paramètre".

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

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Par défaut Merci
    Merci pour votre réponse, je vais essayer tous ça et je vous recontacterais.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Par défaut Aide
    J'ai donc essayer ce que l'on m'avait dis mais je ne réussi pas à faire appel à cette variable.
    Je pense avoir presque finis mon programme donc si vous pouviez m'aider ....
    Merci

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 714
    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 714
    Par défaut
    Salut,

    Citation Envoyé par nono9196 Voir le message
    J'ai donc essayer ce que l'on m'avait dis mais je ne réussi pas à faire appel à cette variable.
    Si vous ne montrez pas ce que vous avez essayé de faire, pas facile de savoir ce que vous n'avez pas compris. Au cas où la lecture de quelques pages d'un tuto. sur les variables locales et globales....

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

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Par défaut Excusez-moi
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    from tkinter import *
    import ctypes
    import tkinter.filedialog
    from PIL import Image
    import sys, os
    import math
    from functools import reduce
    import operator
     
     
     
     
    def Ouvrir():
        global fichier
        filename = tkinter.filedialog.askopenfilename(title="Ouvrir une image",filetypes=[('all files','.*')])
        print(filename)
     
        photo = PhotoImage(file=filename)
        gifdict[filename] = photo
        print(gifdict)
     
        Canevas.create_image(0,0,anchor=NW,image=photo)
        Canevas.config(height=photo.height(),width=photo.width())
     
        fenetre.title("Image "+str(photo.width())+" x "+str(photo.height()))
     
        fichier = filename
     
    def Fermer():
        Canevas.delete(ALL)
        fenetre.title("Comparate PlateNumber")
     
     
    def compare(file1, file2):
     
        image1 = Image.open(file1)
        image2 = Image.open(file2)
        h1 = image1.histogram()
        h2 = image2.histogram()
        rms = math.sqrt(reduce(operator.add,
                               map(lambda a,b: (a-b)**2, h1, h2))/len(h1))
     
        return rms
     
     
     
    fenetre = Tk()
    fenetre.title("Image")
     
    menubar = Menu(fenetre)
     
     
    menufichier = Menu(menubar,tearoff=0)
    menufichier.add_command(label="Ouvrir une image",command=Ouvrir)
    menufichier.add_command(label="Fermer l'image",command=Fermer)
    menufichier.add_command(label="Quitter",command=fenetre.destroy)
    menubar.add_cascade(label="Fichier", menu=menufichier)
    fenetre.config(menu=menubar)
     
    label = Label(fenetre, text="Plaque Auto")
    label.pack()
    bouton = Checkbutton(fenetre, text="Luigi")
    bouton.pack()
    bouton = Checkbutton(fenetre, text="Corentin")
    Button(fenetre, text = 'Comparer', command=compare("img1.png",filename)).pack(side=LEFT, padx=5, pady=5)
    bouton.pack()
     
    photo = PhotoImage(file="img1.png")
    zone_dessin = canvas = Canvas(fenetre,width=600, height=150, borderwidth=8)
    zone_dessin.create_image(300,65,image=photo)
    canvas.pack()
     
    Canevas = Canvas(fenetre)
    Canevas.pack(padx=5,pady=5)
     
    gifdict={}
    fenetre.mainloop()
    J'ai donc mis la variables filename dans une variable globale qui s'appelle fichier, mais quand je lance le programme j'obtiens une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "G:\Ecole\Terminale\ISN\Projet\Projetisn\luigi\Comparate Model.py", line 65, in <module>
        Button(fenetre, text = 'Comparer', command=compare("img1.png",filename)).pack(side=LEFT, padx=5, pady=5)
    NameError: name 'filename' is not defined
    Merci de votre rapidité de réponse en tout cas

  8. #8
    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
    Ce ne serait pas "fichier", ta variable globale ?
    Je dis cela juste en lisant le message d'erreur...

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 714
    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 714
    Par défaut
    Citation Envoyé par nono9196 Voir le message
    [CODE]J'ai donc mis la variables filename dans une variable globale qui s'appelle fichier, mais quand je lance le programme j'obtiens une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "G:\Ecole\Terminale\ISN\Projet\Projetisn\luigi\Comparate Model.py", line 65, in <module>
        Button(fenetre, text = 'Comparer', command=compare("img1.png",filename)).pack(side=LEFT, padx=5, pady=5)
    NameError: name 'filename' is not defined
    Si la variable globale est "fichier", pourquoi utiliser "filename"?
    Pourquoi ne pas avoir tout simplement déclarer filename global?

    Une fois que vous aurez décidé quel nom de variable choisir... écrire command=compare("img1.png",filename) plantera toujours de la même façon car la fameuse variable ne sera créé qu'après être passé dans Ouvrir... i.e. bien après la création du Button. Ca serait plus simple d'écrire command=compare et modifier "compare" pour qu'elle n'attende pas 2 arguments mais récupère le contenu des variables globales.

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

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Par défaut Merci
    Merci pour votre réponse mais je ne comprends pas vraiment ce dont vous me parlez pourriez me montrer ou reformuler votre réponse.
    Merci

    Quand je garde seulement la variable filename en faisant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def Ouvrir():
        global filename
        filename = tkinter.filedialog.askopenfilename(title="Ouvrir une image",filetypes=[('all files','.*')])
        print(filename)
     
        photo = PhotoImage(file=filename)
        gifdict[filename] = photo
        print(gifdict)
     
        Canevas.create_image(0,0,anchor=NW,image=photo)
        Canevas.config(height=photo.height(),width=photo.width())
     
        fenetre.title("Image "+str(photo.width())+" x "+str(photo.height()))
    et donc qu'après je remplace par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    label = Label(fenetre, text="Plaque Auto")
    label.pack()
    bouton = Checkbutton(fenetre, text="Luigi")
    bouton.pack()
    bouton = Checkbutton(fenetre, text="Corentin")
    Button(fenetre, text = 'Comparer', command=compare("img1.png",filename)).pack(side=LEFT, padx=5, pady=5)
    bouton.pack()

    J'ai un message d'erreur qui me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "G:\Ecole\Terminale\ISN\Projet\Projetisn\luigi\Comparate Model.py", line 65, in <module>
        Button(fenetre, text = 'Comparer', command=compare("img1.png",filename)).pack(side=LEFT, padx=5, pady=5)
    NameError: name 'filename' is not defined
    Merci de votre réponse

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Par défaut Réussi
    C'est bon sa marche.
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    from tkinter import *
    import ctypes
    import tkinter.filedialog
    from PIL import Image
    import sys, os
    import math
    from functools import reduce
    import operator
     
     
     
     
    def Ouvrir():
        global filename
        filename = tkinter.filedialog.askopenfilename(title="Ouvrir une image",filetypes=[('all files','.*')])
        print(filename)
     
        photo = PhotoImage(file=filename)
        gifdict[filename] = photo
        print(gifdict)
     
        Canevas.create_image(0,0,anchor=NW,image=photo)
        Canevas.config(height=photo.height(),width=photo.width())
     
        fenetre.title("Image "+str(photo.width())+" x "+str(photo.height()))
     
     
     
    def Fermer():
        Canevas.delete(ALL)
        fenetre.title("Comparate PlateNumber")
        filename = 0
     
    def compare():
     
        image1 = Image.open("img1.png")
        image2 = Image.open(filename)
        h1 = image1.histogram()
        h2 = image2.histogram()
        rms = math.sqrt(reduce(operator.add,
                               map(lambda a,b: (a-b)**2, h1, h2))/len(h1))
     
     
        print (rms)
        if rms == 0:
            print("Identique")
            Mbox('Comparaison', 'Identique', 1)
        else:
            print("Différent")
            Mbox('Comparaison', 'Différent', 1)
     
     
    def Mbox(title, text, style):
        ctypes.windll.user32.MessageBoxW(0, text, title, style)	
     
    fenetre = Tk()
    fenetre.title("Image")
     
    menubar = Menu(fenetre)
     
     
    menufichier = Menu(menubar,tearoff=0)
    menufichier.add_command(label="Ouvrir une image",command=Ouvrir)
    menufichier.add_command(label="Fermer l'image",command=Fermer)
    menufichier.add_command(label="Quitter",command=fenetre.destroy)
    menubar.add_cascade(label="Fichier", menu=menufichier)
    fenetre.config(menu=menubar)
     
    label = Label(fenetre, text="Plaque Auto")
    label.pack()
    bouton = Checkbutton(fenetre, text="Luigi")
    bouton.pack()
    bouton = Checkbutton(fenetre, text="Corentin")
    Button(fenetre, text = 'Comparer', command=compare).pack(side=LEFT, padx=5, pady=5)
    bouton.pack()
     
    photo = PhotoImage(file="img1.png")
    zone_dessin = canvas = Canvas(fenetre,width=600, height=150, borderwidth=8)
    zone_dessin.create_image(300,65,image=photo)
    canvas.pack()
     
    Canevas = Canvas(fenetre)
    Canevas.pack(padx=5,pady=5)
     
    gifdict={}
    fenetre.mainloop()

  12. #12
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Bravo

    Reste plus qu'à faire une vérification que la fonction ouvrir a été appelée une fois avant de faire ton compare, sinon tu vas te pendre une erreur.

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Par défaut Réussi
    C'est bon j'ai tout testé et ça marche.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 25/04/2015, 19h22
  2. Comparaison images
    Par momedalhouma dans le forum Android
    Réponses: 1
    Dernier message: 20/02/2013, 14h25
  3. Tri avec fonction de comparaison personnalisée (Python 3)
    Par MorganStern dans le forum Général Python
    Réponses: 4
    Dernier message: 28/01/2010, 12h22
  4. Comparaison image (débutant)
    Par Hurin dans le forum C#
    Réponses: 4
    Dernier message: 17/08/2007, 14h22
  5. comparaison images bmp
    Par nicolovitch dans le forum Windows
    Réponses: 6
    Dernier message: 02/05/2007, 11h33

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