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 :
Boucle de mon traitement réalisé X fois
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)
.....commandes d'affichage de la matrice :
.....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
3
4 nomaffichage = 'Matrice ' + str(compteurpassage) figure(nomaffichage) xlabel(nomaffichage) imshow(nomaffichage)
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 :
.....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
1
2
3 fichierimage = "image.png" imagelue = Image.open(fichierimage) draw=ImageDraw.Draw(imagelue)
.....Puis affichage de l'image modifiée
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))
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
Partager