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

EDI/RAD Python Discussion :

méthode PIL et postérisation [Python 3.X]


Sujet :

EDI/RAD Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2016
    Messages : 32
    Points : 22
    Points
    22
    Par défaut méthode PIL et postérisation
    Bonjour à tous,
    je souhaiterais postériser une image à partir d'un seuil de gris par la méthode PIL ; je réussis à recréer une image en valeurs de gris mais je n'arrive pas à postériser ensuite selon la valeur de gris trouvé.
    Merci de m'aider si possible.
    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
     
    import numpy as np
    from PIL import Image
    from os import chdir,getcwd
     
    # Définition du répertoire de travail
    repertoire="C:..." # Chemin du REPERTOIRE
    chdir(repertoire) #La méthode chdir() modifie le REPERTOIRE de travail en cours.
     
    IM=Image.open("image_couleur.png")   #lecture de l'image en couleur
    matrice_image=np.array(IM)
     
    n=matrice_image.shape[0]       #accés au premier composant : n est le nb de lignes (393)
    m=matrice_image.shape[1]       #accés au second composant : m est le nb de colonnes (700)
    IMN=np.zeros((n,m),dtype='uint8') #création d'une matrice de n lignes et de m colonnes de valeurs 0
     
    def Noir(image):
    #création pour chaque pixel d'une valeur de gris
        for i in range(n):
            for j in range(m):  #pour chaque pixel de chaque ligne de chaque colonne
                IMN[i,j]=0.299*image[i,j][0]+0.587*image[i,j][1]+0.114*image[i,j][2]
        return IMN      
     
    def f_seuil (image, seuil) :
        if image[i,j] < seuil :
            return 50
        else :
            return 200
        return
     
    image_posterisee=np.zeros((n,m),dtype='uint8')
    for i in range (n) :
        for j in range (m) :
            image_posterisee[i,j] = f_seuil(Noir(matrice_image),128)
     
    image_noire = Image.fromarray(image_posterisee)
    image_noire.show()

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Pourquoi, diable, recalcules-tu ton image noir et blanc à chaque pixel évalué ?
    Ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i in range (n) :
        for j in range (m) :
            image_posterisee[i,j] = f_seuil(Noir(matrice_image),128)
    devrait être comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    IMN = Noir(matrice_image)
    for i in range (n) :
        for j in range (m) :
            image_posterisee[i,j] = f_seuil(IMN,128)
    Cela dit, Pillow peut faire plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    >>> from PIL import Image
    >>> im = Image.open("Braille_.jpg")
    >>> im.load()
    <PixelAccess object at 0x7fbb9ca901d0>
    >>> im_grey = im.convert(mode="P")
    >>> def seuil(val):
    ...     if val < 128:
    ...             return 50
    ...     return 200
    ... 
    >>> poster = Image.eval(im_grey, seuil)
    >>> poster.show()
    Tout est là: https://pillow.readthedocs.io/en/5.2...nce/Image.html

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2016
    Messages : 32
    Points : 22
    Points
    22
    Par défaut ça marche mieux
    merci beaucoup pour ta réponse mais en fait, je ne vois pas la différence entre les 2 codes suivants

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in range (n) :
        for j in range (m) :
            image_posterisee[i,j] = f_seuil(Noir(matrice_image),128)
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IMN = Noir(matrice_image)
    for i in range (n) :
        for j in range (m) :
            image_posterisee[i,j] = f_seuil(IMN,128)
    dans le premier cas, je calculais le seuil de la valeur de gris de chaque pixel de la matrice image
    et dans le second, je calcule le seuil de la valeur de gris pour chaque pixel de ... la matrice image.

    Si tu pouvais m'éclairer sur la différence entre les 2 ...

  4. #4
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Ta fonction Noir sert simplement à créer une version gamme de gris de l'image couleur.

    Une fois fait, inutile de recommencer pour chaque pixel de image_posterisee

  5. #5
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2016
    Messages : 32
    Points : 22
    Points
    22
    Par défaut
    ok merci.
    j'ai une autre question concernant le cmpa de matplotlib ; je ne trouve pas d'indication claire sur le net ni sur le forum.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plt.imshow(Gris(IM),cmap=cm.gray) #permet de visualiser l'image en niveaux de gris sur une seule valeur donnée par l'équation IMG[i,j] ; si cm.hot : couleur chaude
    j'ai écrit cela pour expliquer ma ligne ; est ce correct ?
    d'autre part, quelle autre valeur (que gray et hot) puis je donner ?

  6. #6
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Je n'utilise pas matplotlib donc je ne peux t'aider, mais lance plutôt une nouvelle discussion et met matplotlib dans le titre.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2016
    Messages : 32
    Points : 22
    Points
    22
    Par défaut
    d'accord ; merci encore pour ton aide.

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

Discussions similaires

  1. [Méthodes]UML vs MERISE Lequel pour quoi ?
    Par Daniel258 dans le forum Méthodes
    Réponses: 5
    Dernier message: 31/03/2003, 11h49
  2. Gros Problème avec DirectShow et la méthode RELEASE
    Par Olivier Delmotte dans le forum DirectX
    Réponses: 3
    Dernier message: 10/03/2003, 18h10
  3. [Singleton] Différences avec méthodes statiques
    Par Franche dans le forum Design Patterns
    Réponses: 1
    Dernier message: 26/02/2003, 17h10
  4. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26
  5. Cryptage en C selon la méthode de césat
    Par shenron dans le forum C
    Réponses: 2
    Dernier message: 31/05/2002, 08h22

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