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 :

Affichages de fenêtre beaucoup trop long avec imshow() [Python 3.X]


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2013
    Messages : 76
    Points : 40
    Points
    40
    Par défaut Affichages de fenêtre beaucoup trop long avec imshow()
    Bonjour,

    J'ai un (gros gros gros....) soucis avec un affichage, il est extrêmement, mais alors vraiment extrêmement long.
    Mon programme lit une image, la tranforme en matrice puis exécute un traitement X fois sur la matrice puis applique le résultat final sur l'image.
    Sur une image donnant une matrice 1000x1000, l'exécution de 5 passages de traitement se réalise en 2s.

    Afin de visualiser le traitement, j'effectue un affichage initiale de l'image puis j'associe un affichage à chaque passage sur la matrice de manière à avoir mes X affichages à l'écran et je réaffiche l'image PNG modifiée.
    Mon problème est qu'avec l'affichage, mon programme s'exécute en plus de ........ 3 heures..... La misère.
    Tout mes affichages sont réalisés avec la commande imshow() de la bibliothèque matplotlib.

    Ma demande est donc, avec python 3.5, quelle commande permet d'afficher plusieurs fenêtre à partir d'un fichier PNG ou vide et d'y dessiner des cercles colorés avec un temps de réponse acceptable.....


    Je schématise mon programme :

    Lecture et affichage d'un fichier PNG :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fichierimage = "image.png"
    imagelue = ndimage.imread(fichierimage)
    figure("Image initiale")
    xlabel("Image initiale")
    imshow(imagelue)
    Boucle de mon traitement réalisé X fois
    .....commandes d'affichage de la matrice :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    nomaffichage = 'Matrice ' + str(compteurpassage)
    figure(nomaffichage)
    xlabel(nomaffichage)
    imshow(nomaffichage)
    .....Pour chaque élément de la matrice, traitement et dessin d'un cercle coloré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    setp(cercle, 'markersize', surfacecercle)
    setp(cercle, 'markerfacecolor',(couleur1,couleur,couleur2))


    Application du traitement à l'image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fichierimage = "image.png"
    imagelue = Image.open(fichierimage)
    draw=ImageDraw.Draw(imagelue)
    .....Parcours de ma matrice et application d'un cercle sur l'image selon certains critères
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    draw.ellipse([j,i,j+delta,i+delta], fill=(c1,c2,c3,c4), outline=(c1,c2,c3,c4))
    .....Puis affichage de l'image modifiée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    figure("Image modifiée")
    xlabel("Image modifiée")
    imshow(imagelue)

    Voilà, si quelqu'un peut me donner un coup de main pour que ma misère de programme soit utilisable sans que je m'endorme devant mon écran ....

    Un grand merci.

    Au fait, bonne fête de fin d'année à toutes et à tous

  2. #2
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2013
    Messages : 76
    Points : 40
    Points
    40
    Par défaut Affichage avec Imshow() trop long. Quelle solution pour un affichage rapide ?
    Bonjour,

    J'ai un (gros gros gros....) soucis avec un affichage, il est extrêmement, mais alors vraiment extrêmement long.
    Mon programme lit une image, la transforme en matrice puis exécute un traitement X fois sur la matrice puis applique le résultat final sur l'image.
    Sur une image donnant une matrice 1000x1000, l'exécution de 5 passages de traitement se réalise en 2s.

    Afin de visualiser le traitement, j'effectue un affichage initiale de l'image puis j'associe un affichage à chaque passage sur la matrice de manière à avoir mes X affichages à l'écran et je réaffiche l'image PNG modifiée.
    Mon problème est qu'avec l'affichage, mon programme s'exécute en plus de ........ 3 heures..... La misère.
    Tout mes affichages sont réalisés avec la commande imshow() de la bibliothèque matplotlib.

    Ma demande est donc, avec python 3.5, quelle commande permet d'afficher plusieurs fenêtre à partir d'un fichier PNG ou vide et d'y dessiner des cercles colorés avec un temps de réponse acceptable.....


    Je schématise mon programme :

    Lecture et affichage d'un fichier PNG :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fichierimage = "image.png"
    imagelue = ndimage.imread(fichierimage)
    figure("Image initiale")
    xlabel("Image initiale")
    imshow(imagelue)
    Boucle de mon traitement réalisé X fois
    .....commandes d'affichage de la matrice :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    nomaffichage = 'Matrice ' + str(compteurpassage)
    figure(nomaffichage)
    xlabel(nomaffichage)
    imshow(nomaffichage)

    .....Pour chaque élément de la matrice, traitement et dessin d'un cercle coloré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    setp(cercle, 'markersize', surfacecercle)
    setp(cercle, 'markerfacecolor',(couleur1,couleur,couleur2))


    Application du traitement à l'image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fichierimage = "image.png"
    imagelue = Image.open(fichierimage)
    draw=ImageDraw.Draw(imagelue)
    .....Parcours de ma matrice et application d'un cercle sur l'image selon certains critères
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    draw.ellipse([j,i,j+delta,i+delta], fill=(c1,c2,c3,c4), outline=(c1,c2,c3,c4))
    .....Puis affichage de l'image modifiée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    figure("Image modifiée")
    xlabel("Image modifiée")
    imshow(imagelue)

    Voilà, si quelqu'un peut me donner un coup de main pour que ma misère de programme soit utilisable sans que je m'endorme devant mon écran ....

    Un grand merci.

    Au fait, bonne année à toutes et à tous

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Personnellement, j'ai lu votre prose et je ne comprends pas le problème.
    Déjà, on ne sait pas dans quelle bibliothèque vous êtes allé cherché votre imshow, peut être dans PIL mais çà s'écrit alors (Image).show ensuite, vous dites qu'afficher les images est lent mais vous ne fournissez rien qui permette de reproduire quoi que ce soit.

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

  4. #4
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2013
    Messages : 76
    Points : 40
    Points
    40
    Par défaut
    Merci de ta réponse.

    Je vais essayer d'éclaircir.
    Je veux afficher dans une fenêtre un fichier png.
    Dans une autre fenêtre, je lis des données et selon les données, j'affiche des cercles de couleurs dans cette fenêtre mais aussi dans le fichier png.

    J'utilise la librairie "matplotlib.pyplot" avec imshow() pour :
    - l'affichage d'un fichier image.png
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fichierimage = "image.png"
    imagelue = ndimage.imread(fichierimage)
    figure("Image initiale")
    xlabel("Image initiale")
    imshow(imagelue)
    - l'affichage d'une fenêtre avec des cercles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    figure('fenetre')
    imshow(mapblanc)
    setp(cercle, 'markersize', surfacecercle)
    setp(cercle, 'markerfacecolor',(couleur1,couleur,couleur2))
    J'utilise la librairie "PIL import ImageDraw, Image" pour afficher un fichier png et dessiner des cercles dans la fenêtre affichant le fichier png :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fichierimage = "imageforet.png"
    imageforet = Image.open(fichierimage)
    draw=ImageDraw.Draw(imageforet)
    draw.ellipse([j,i,j+delta,i+delta], fill=(c1,c2,c3,c4), outline=(c1,c2,c3,c4))
    Image png avec les cercles : Nom : Capture1.PNG
Affichages : 965
Taille : 116,2 Ko
    fenetre avec des cercles : Nom : Capture2.PNG
Affichages : 1042
Taille : 16,6 Ko

    Voilà, j'espère que cela explique mieux.
    Les temps d'affichages de ces fenêtres sont beaucoup trop long donc je cherche soit à résoudre ce problème soit utiliser d'autres librairies.

    Merci

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Tonivege Voir le message
    Je veux afficher dans une fenêtre un fichier png.
    Dans une autre fenêtre, je lis des données et selon les données, j'affiche des cercles de couleurs dans cette fenêtre mais aussi dans le fichier png.
    Toujours pas d'exemple de code minimal qui montre ou permette de reproduire le problème.
    Et toujours une fixation sur le temps d'affichage de vos images plutôt que de vous questionner sur le code exécuté "autour".
    Peut être qu'en mettant ces affichages en commentaires vous vous poseriez de meilleures questions?

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

  6. #6
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2013
    Messages : 76
    Points : 40
    Points
    40
    Par défaut
    Re merci.

    Mais oui, j'ai positionné des timestamps, l'exécution du programme sur une matrice importante est de moins de 8s.
    L'affichage uniquement de l'image png de 1400x1000 est de quelques minutes (je n'ai pas mon ordi sous la main pour donner le temps exact.... Le ferai ce soir).
    Sachant qu'ensuite j'affiche de 4 à 5 fenêtres avec les cercles ... Cela devient long, du moins pour un programme avec une IHM... J'ai fait un test avec une grosse image et résultat, 1mn de calcul et 3h d'affichages.....
    Et pour le code, j'ai extrait tout ce qui n'avait pas d'intérêt pour ne garder que le code d'affichage. Sinon, faut aussi que je dépose les fichiers de données qui sont lus en amont, bref....
    Mais je pense que pour un test rapide, le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    from matplotlib.pyplot import *
    fichierimage = "unfichierimage.png"
    imagelue = ndimage.imread(fichierimage)
    figure("Image initiale")
    xlabel("Image initiale")
    imshow(imagelue)
    est suffisant.
    Je vais essayé avec un autre ordi d'ailleurs pour voir le résultat, mais faut que j'installe python....
    Merci

  7. #7
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    Citation Envoyé par Tonivege Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    from matplotlib.pyplot import *
    fichierimage = "unfichierimage.png"
    imagelue = ndimage.imread(fichierimage)
    figure("Image initiale")
    xlabel("Image initiale")
    imshow(imagelue)
    j'ai essayé ce code, en récupérant au préalable une image de 1400x1000 pixels en PNG sur le net, pour le moins il manque un from scipy import ndimage, quant à l'exécution elle est pour ainsi dire immédiate (fin du programme, sortie sans erreur), en revanche rien ne s'affiche.

    Citation Envoyé par Tonivege Voir le message
    j'ai positionné des timestamps, l'exécution du programme sur une matrice importante est de moins de 8s.
    au delà des timestamps à la main, tenter de profiler le code est peut être une bonne idée
    un truc du style python -m cProfile script.py, avec éventuellement un tri sur les colonnes jugées pertinentes dans la foulée, à voir...

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,
    Déjà le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    from matplotlib.pyplot import *
    fichierimage = "unfichierimage.png"
    imagelue = ndimage.imread(fichierimage)
    figure("Image initiale")
    xlabel("Image initiale")
    imshow(imagelue)
    ne fonctionne pas car il manque sans doute l'import de scipy.
    Après si je récupère une image 1400x1000 sur Internet et que je l'affiche avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> from PIL import Image
    >>> im = Image.open('test.png')
    >>> im.show()
    >>>
    c'est loin de prendre des minutes mais çà lance un Viewer externe (ce qui prend du temps) car il faut déjà écrire et relire les données sur disque.
    Mais on peut facilement se fabriquer un Viewer "interne":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from PIL import Image, ImageTk
    import tkinter as tk
     
    root = tk.Tk()
    image = Image.open('test.png')
    photo = ImageTk.PhotoImage(image)
    label = tk.Label(image=photo)
    label.pack()
    tk.mainloop()
    qui sera bien plus rapide (pour autant que le problème vienne bien du programme externe).

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

  9. #9
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2013
    Messages : 76
    Points : 40
    Points
    40
    Par défaut
    Merci de vos réponses, en effet, il manquait spicy.

    En lisant vos réponses, j'ai tilté sur une commande imshow()... wiztricks a écrit im.show() ce qui n'est pas pareil ....

    En fait j'utilise pour chaque fenêtre un imshow(fenetre) et en fin de programme j'avais un show().
    j'ai fait un test rapide avec un show() après chaque imshow(fenetre) en effet les fenêtres avec les png s'affichent rapidement....

    Je dois regarder dans le détail la différence entre ces 2 commandes imshow(nomfenetre) et show(). J'avais pris les exemples sur https://matplotlib.org mais je dois chercher un tuto plus précis.

    En tout cas, merci de vos retours rapides qui montrent que le pb est bien chez moi, je dois revoir cela sur mon prog ce soir.
    Je posterai le résultat, j'espère aboutir.

  10. #10
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2013
    Messages : 76
    Points : 40
    Points
    40
    Par défaut
    Bon, me revoilà....

    J'ai cherché un tuto pour clarifier les commandes show() et imshow(), à part que imshow() est mieux pour les matrices, je n'ai pas trouver ce qu'il me fallait.
    L'insertion de show() permet en effet un affichage immédiat.
    C'est tout bon pour l'affichage d'une image avec des cercles tracés à l'aide de" ImageDraw.Draw(image)". Affichage immédiat. Parfait.
    J'ai pu isoler le bloc qui rame, ce sont les commandes plot et setp, elles me servent à dessiner des cercles de différentes couleurs.
    J'ai extrait mon code en virant tout le superflu pour faciliter la compréhension.
    L'exécution pour une matrice 100x100 est de 3m 30s environ.
    Si je remplace les lignes 11 à 20 à l'intérieur de mes boucles par une commande quelconque, le temps de traitement est de 0s. Le problème vient bien des commandes "plot" lignes 12 et 14 et "setp()" lignes 15 et 20.

    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
    from matplotlib.pyplot import *
    from scipy import ndimage
    from time import time
    from numpy import *
     
     
    def affichagegraphique():
        tempsinter = time()
        for i in range(0,100):
            for j in range (0,100):
                if j%2 == 0:       # Changer la couleur du bord du cercle
                    cercle = plot([j], [i], "ko")
                else:
                    cercle = plot([j], [i], "wo")
                setp(cercle, 'markersize', 3)
                if j%2 == 0:       # Changer la couleur de l interieur du cercle
                    couleur,couleur1,couleur2 = 0,0,0
                else:
                    couleur,couleur1,couleur2 = 1,1,1
                setp(cercle, 'markerfacecolor',(couleur1,couleur,couleur2))  # formattage du cercle
        tempsdelta = time() - tempsinter
        print('Durée affichage graphique : ',int(tempsdelta/3600),'h ',int((tempsdelta%3600)/60),'m ',int((tempsdelta-int((tempsdelta%3600)/60)*3600)%60),'s')
        tempsinter = time()
     
        title('Matrice')
        xlabel('Matrice')
     
    tempsinter = time()
    mapblanc = ones((1000,1000,3))
    figure('Matrice initiale')
    imshow(mapblanc)
    affichagegraphique()
    show()
     
    tempsdelta = time() - tempsinter
    print('Durée appel : ',int(tempsdelta/3600),'h ',int((tempsdelta%3600)/60),'m ',int((tempsdelta-int((tempsdelta%3600)/60)*3600)%60),'s')
    tempsinter = time()
    Si vous avez une idée pour régler mon problème de code ou bien une autre méthode pour obtenir l'affichage souhaité d'une fenêtre avec des cercles (voir l'image dans mon précédent post).
    Sinon, wiztricks, tu as proposé d'utiliser la bibliothèque TKinter, j'avais lu quelque part qu'elle ne tournait pas sur python 3.5. Il faut rester en version 2.
    Je vais regarder.
    Merci de vos conseils.

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Tonivege Voir le message
    Si vous avez une idée pour régler mon problème de code ou bien une autre méthode pour obtenir l'affichage souhaité d'une fenêtre avec des cercles (voir l'image dans mon précédent post).
    Il y a plein de façons de réaliser un tas de disques.
    Il faudrait savoir pourquoi vous les faites (le côté fonctionnel de la chose) et pourquoi vous avez choisi de les faire ainsi (qu'est ce que çà apporte?) pour envisager de faire cela autrement.

    Citation Envoyé par Tonivege Voir le message
    Sinon, wiztricks, tu as proposé d'utiliser la bibliothèque TKinter, j'avais lu quelque part qu'elle ne tournait pas sur python 3.5. Il faut rester en version 2.
    tkinter est la bibliothèque de base graphique incluse dans Python en standard. La seule différence entre Python 2 et Python 3 est d'avoir renommé Tkinter en tkinter (pour respecter les conventions de nommage) et la mise à jour de TCL/Tk qui passe en 8.6 depuis 3.4 (si mes souvenirs sont bons).
    De toutes façons, la bibliothèque graphique utilisée par matplotlib est tkinter par défaut. Donc vous l'utilisez déjà indirectement.

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

  12. #12
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2013
    Messages : 76
    Points : 40
    Points
    40
    Par défaut
    Merci pour les infos sur tkinter. Je vais regarder. J'ai précédemment utilisé tkinter avec une seule fenêtre active sur laquelle je faisais des manip au clavier ou à la souris. Ce n'est pas mon besoin actuel qui est d'afficher un résultat sans manip clavier.
    Je vais testé le code que tu as posté voir ce que cela donne.

    Pour mon prog, je lis une matrice X par Y avec des chiffres, selon les chiffres, je dessine un cercle avec une couleur pour le bord et une autre couleur pour l'intérieur, couleurs déterminées selon un paramètre.
    J'affiche le résultat dans une fenêtre, je peux relancer ce traitement autant de fois que voulu en faisant varier mon paramètres donc mes couleurs et à chaque fois, j'affiche une fenêtre avec des cercles tel que présenté dans l'image "fenêtre avec des cercles".
    Lorsque j'estime le résultant satisfaisant, j'applique le même traitement sur une image d'un fichier png tel que présenté dans "image png avec les cercles".

    Donc besoin d'afficher n fenêtres à partir d'une matrice avec des cercles de couleurs qui varient selon mon paramètre.
    L'affichage est géré comme dans mon exemple par une fonction affichagegraphique() qui parcourt la matrice, selon un test, dessine un cercle avec une couleur pour le bord et une autre couleur pour l'intérieur.
    En plus, je sauvegarde chaque version de la fenêtre dans un fichier png avec la commande "savefig(fichierimage)" qui sauvegarde la "figure" en cours.

    Voilà.

  13. #13
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2013
    Messages : 76
    Points : 40
    Points
    40
    Par défaut
    Bon, j'ai testé le code posté avec tkinter.

    En effet, pas besoin de charger quoi que ce soit, la bibli est dispo, cool.
    Par contre, cela m'affiche une fenêtre tkinter vide (blanche quoi), j'ai changer d'image pour tester différentes tailles mais rien n'y fait. Après, comment y insérer des cercles .....

    A suivre donc...

    Merci.

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Tonivege Voir le message
    Par contre, cela m'affiche une fenêtre tkinter vide (blanche quoi), j'ai changer d'image pour tester différentes tailles mais rien n'y fait. Après, comment y insérer des cercles .....
    Ca serait bien de poster le code que vous avez pondu côté "changement d'image": tkinter n'est pas si simple d'emploi.
    Pour faire des cercles, vous fabriquez un widget Canvas et la méthode .create_elipse.

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

  15. #15
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2013
    Messages : 76
    Points : 40
    Points
    40
    Par défaut
    Sur https://matplotlib.org/gallery/lines...ers-arctest-py , j'ai testé le code proposé,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import matplotlib.pyplot as plt
    import numpy as np
     
    def f(t):
        'A damped exponential'
        s1 = np.cos(2 * np.pi * t)
        e1 = np.exp(-t)
        return s1 * e1
     
    t1 = np.arange(0.0, 200.0, .2)
    l = plt.plot(t1, f(t1), 'ro')
    plt.setp(l, 'markersize', 30)
    plt.setp(l, 'markerfacecolor', 'C0')
    plt.show()
    L'affichage est excellent !!!
    A priori, l'appel de "setp" et "plot" ne se fait qu'une seule fois en passant en paramètres les coordonnées des cercles via t1 et f(t1) mais ils ont tous la même couleur...
    Pour faire varier la couleur de chaque cercle, cela devient compliqué car il faut alors appeler "setp" et "plot" à chaque couleur différente...
    Hummmmm....

  16. #16
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2013
    Messages : 76
    Points : 40
    Points
    40
    Par défaut
    Pour le test tkinter, j'ai repris ton code tel quel avec juste une image à moi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from PIL import Image, ImageTk
    import tkinter as tk
     
    root = tk.Tk()
    image = Image.open('monimage.PNG')
    photo = ImageTk.PhotoImage(image)
    label = tk.Label(image=photo)
    label.pack()
    tk.mainloop()
    Résultat = fenêtre tkinter mais blanche, vide quoi.

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Tonivege Voir le message
    Pour le test tkinter, j'ai repris ton code tel quel avec juste une image à moi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from PIL import Image, ImageTk
    import tkinter as tk
     
    root = tk.Tk()
    image = Image.open('monimage.PNG')
    photo = ImageTk.PhotoImage(image)
    label = tk.Label(image=photo)
    label.pack()
    tk.mainloop()
    Résultat = fenêtre tkinter mais blanche, vide quoi.
    je ne sais pas reproduire sans l'image, et sans pouvoir reproduire: j'entends ce que vous dites mais comme je ne le touche pas, je n'ai aucun avis.

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

  18. #18
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2013
    Messages : 76
    Points : 40
    Points
    40
    Par défaut
    Un fichier png quelconque fait l'affaire. Par exemple :

    Nom : maison.png
Affichages : 924
Taille : 399,3 Ko

  19. #19
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Désolé mais çà fonctionne très bien chez moi.

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

  20. #20
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2013
    Messages : 76
    Points : 40
    Points
    40
    Par défaut
    Alors là ......

    Je suis en Python 3.6.3 |Anaconda, Inc.

    Le résultat chez moi : Nom : Capture.PNG
Affichages : 917
Taille : 22,1 Ko

    Bon, je vais aller boire une bière ....
    Merci quand même

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

Discussions similaires

  1. Tronquer un texte trop long avec …
    Par mestressat dans le forum Langage
    Réponses: 7
    Dernier message: 22/01/2012, 13h15
  2. délai de requête trop long avec sql server
    Par tiferg dans le forum Projets ADP
    Réponses: 0
    Dernier message: 24/03/2010, 08h43
  3. MS SQL 2000 - Job SQL Agent beaucoup trop long
    Par williamc73 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 18/11/2009, 14h08
  4. Réponses: 5
    Dernier message: 30/03/2006, 11h59
  5. [DELETE]Beaucoup trop long
    Par bourbaki2003 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 23/12/2005, 10h29

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