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 :

Temps d'exécution extremement long [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 79
    Par défaut Temps d'exécution extremement long
    Bonjour, pour les besoins d'un logiciel, je dois créer un programme qui me permet de générer l'histogramme d'une image en python. J'utilise le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    import os 
    from PIL import Image
    import matplotlib.pyplot as plt 
     
    os.chdir("/home/admin01/Images/test")
    img = Image.open('lyon.jpg')
    data = img.getdata()
    plt.hist(data, bins=256, range =(0,255),facecolor="green")
    plt.show()
    Malheuresement, le temps d'exécution est énoooooooorme. Ça me fait un peu penser à une boucle infinie :/

    Si vous avez des idées qui puisse résoudre mon problème je vous écouterai avec plaisir,
    Merci
    Florian

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Avec l'histogramme de PIL on obtient les valeurs avec des temps de moins de 0.2 sec. (image de 50 Mo), donc regarde si ce n'est pas plus simple de l'utiliser directement et de refiler les valeurs à matplotlib.

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    J'ai pris la peine de revérifier avec un script que j'avais fait pour comparer les temps de construction d'histogramme entre openCV et PIL

    Sur un dossier de 20 images, essentiellement en TIFF et totalisant 553,765 Mo, les histogrammes sont dessinés avec Qt et enregistrés sur le disque.

    Total avec openCV : 3.901523 sec.
    Total avec PIL: 3.072991 sec.

  4. #4
    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
    J'utilise ceci :

    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
    from PIL import Image
    import pylab as py
    import os
     
    fichier = "billes.jpg"
    ncolors = 255
     
    mon_image = py.array(Image.open(fichier))
     
    rouge   = [ r for bande in mon_image[:,:,2] for r in bande ]
    vert = [ g for bande in mon_image[:,:,1] for g in bande ]
    bleu  = [ b for bande in mon_image[:,:,0] for b in bande ]
     
    py.figure()
    r_n, r_bins, var = py.hist(rouge, ncolors, histtype='stepfilled', align='left',alpha=0.5,aa=False,ec='none')
    g_n, g_bins, var = py.hist(vert, ncolors, histtype='stepfilled', align='left',alpha=0.5,aa=False,ec='none')
    b_n, b_bins, var = py.hist(bleu, ncolors, histtype='stepfilled', align='left',alpha=0.5,aa=False,ec='none')
     
    max_samples = py.amax([len(r_n), len(g_n), len(b_n)])
    max_density = py.amax([r_n.max(), g_n.max(), b_n.max()])
    py.imshow(mon_image, interpolation='bilinear', extent=[0,max_samples,0,max_density])
     
    py.axis('tight')
    axes = py.gca()
    axes.get_xaxis().set_ticks([])
    axes.get_yaxis().set_ticks([])
    py.xlabel('Saturation (0-1)')
    py.ylabel('Densité')
     
    py.title('Densité de couleur de %s' % os.path.basename(fichier))
    py.savefig('histo+image.eps')
    py.show()
    ou ceci :

    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
    from PIL import Image
    import numpy as np
    import matplotlib.pyplot as plt
     
    mon_image = Image.open("billes.jpg") 
    hist = [] # ou hist = list()
     
    largeur,hauteur = mon_image.size
     
    for i in range(256):
        hist.append(0)
    for ligne in range(hauteur):
        for colonne in range(largeur):
            p = mon_image.getpixel((colonne,ligne))
            n_gris = int((p[0]+p[1]+p[2])/3)
            hist[n_gris] = hist[n_gris]+1
     
    n_abscisses = np.linspace(0,255,256)
    n_ordonnees = np.array(hist)
    plt.xlim(0,255)
    plt.plot(n_abscisses,n_ordonnees)
    plt.grid(True)
    plt.show()

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 79
    Par défaut
    Merci à vous deux =)

    Grace a tes codes je peux enfin avancer.
    Je ne sais pas du tout pourquoi mon code ne fonctionnait pas :/
    Je vais essayer d'y réfléchir plus tard mais en attendant je passe à autre chose. Un grand MERCI =)

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

Discussions similaires

  1. Pourquoi le temps d'exécution si long sur PDI ?
    Par helene0618 dans le forum kettle/PDI
    Réponses: 7
    Dernier message: 11/03/2009, 21h49
  2. Temps d'exécution très long : jointure
    Par ddazou dans le forum SQL
    Réponses: 18
    Dernier message: 28/10/2008, 21h59
  3. temps d'exécution trop long trés bizarre
    Par fatjoe dans le forum C++
    Réponses: 0
    Dernier message: 09/05/2008, 02h42
  4. temps d'exécution très long
    Par Adam_01 dans le forum C#
    Réponses: 18
    Dernier message: 22/06/2007, 09h37
  5. temps de calculs extremement long !!
    Par salseropom dans le forum C++
    Réponses: 9
    Dernier message: 19/01/2005, 20h12

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