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

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Points : 4
    Points
    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 chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    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.
    Pas d'aide par mp.

  3. #3
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    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
    Pas d'aide par mp.

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Points : 4
    Points
    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 é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,

    à 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 chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Traiter une petite image et insérer quelques "print" permettrait sans doute de résoudre le problème.
    Pas d'aide par mp.

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Je vais mettre les pixels d'origine dans la zone non traitée, ça suffira pour ce qu'on me demande
    Merci de vos réponses en tout cas !

+ 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