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

Programmation multimédia/Jeux Python Discussion :

Léger détail dans un programme pour flouter une image [PIL] [Python 3.X]


Sujet :

Programmation multimédia/Jeux Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Par défaut Léger détail dans un programme pour flouter une image [PIL]
    Bonjour !

    Pour un projet en cours d'ISN, j'ai essayé de faire un programme afin de rendre une image floue à l'aide de PIL.
    Si j'ai bien compris, il faut moyenner la valeur de chaque pixel avec celle des pixels voisins. J'ai choisi de le faire dans une matrice de 5x5.
    Evidemment, j'obtiens des bandes noires sur le côté de la nouvelle image, sinon les boucles for sortiraient de la range de l'image.
    Ca à l'air de fonctionner avec ce programme :
    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
     
    im=Image.open('chat.ppm')
    imflou=Image.new("RGB",(im.size[0],im.size[1]))
    rouge=int(0)
    vert=int(0)
    bleu=int(0)
     
     
    for x in range(im.size[0]):
        for y in range(im.size[1]):
            if x-2>=0 and y-2>=0 and x+2<=im.size[0] and y+2<=im.size[1]:
                for x2 in range(x-2,x+2):
                    for y2 in range(y-2,y+2):
                        pix=im.getpixel((x2,y2))
     
                        rouge=rouge+pix[0]
                        vert=vert+pix[1]
                        bleu=bleu+pix[2]
     
                rouge=rouge//25
                vert=vert//25
                bleu=bleu//25
                imflou.putpixel((x,y),(rouge,vert,bleu))
                rouge=0
                vert=0
                bleu=0
     
     
     
    imflou.show()
    Le problème, c'est que le résultat affiche une ligne de pixels noir en trop en haut et à gauche, mais je n'arrive vraiment pas à savoir d'où cela provient.
    Est-ce que quelqu'un aurait une idée ?
    Merci

  2. #2
    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
    Je n'ai pas approfondi mais a priori, tu fais la moyenne sur les pixels voisins et il y a nécessairement des effets de bord puisque les pixels des bords ne sont pas traités. Il faut donc y mettre les pixels de l'image de départ.

  3. #3
    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
    Si cela t'intéresse, j'ai mis pas mal de ressources ici sur le traitement d'images avec PIL :
    http://obelix56.free.fr/spip.php?article55

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Par défaut
    Merci pour le lien
    J'ai bien compris qu'il y aurait forcément des bandes noires vu que je ne traite pas toute l'image, mais le petit détail qui m'embête c'est que je n'arrive pas à comprendre pourquoi ces bandes sont plus épaisses sur les cotés haut et gauche de l'image

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

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    à vue de pif comme ça et en ayant lu en diagonale - - je dirais que ça provient du fait que tu effectues ton interpolation avec deux boucles for imbriquées, traitant les pixels des bords comme n'importe quel autre pixel
    du coup si on considère x le pixel tout à droite, x-2 et x-1 sont bien les pixels sur la même ligne qui le précèdent, en revanche x+1 et x+2 sont les pixels tout à gauche de la ligne en dessous (en gros, modulo l'alignement etc.)

  6. #6
    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
    Traiter une petite image et insérer quelques "print" permettrait sans doute de résoudre le problème.

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

Discussions similaires

  1. ContentType dans Ajax jQuery pour retourner une image.
    Par yvancoyaud dans le forum jQuery
    Réponses: 2
    Dernier message: 07/10/2015, 09h30
  2. Réponses: 1
    Dernier message: 17/09/2014, 10h11
  3. [Débutant] programme pour copier une image d'un dossier a un autre avec c#
    Par Simomis dans le forum C#
    Réponses: 5
    Dernier message: 26/04/2013, 12h01
  4. [ImageMagick] Problème dans le code pour redimensionner une image
    Par pierrot10 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 08/06/2007, 14h06

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