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 :

Selection d'une partie d'une image à partir d'un polygone


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Selection d'une partie d'une image à partir d'un polygone
    Bonjour à tous et à toutes

    Je vais essayer d'expliquer mon problème aussi clairement que possible.

    J'ai pour outil de base une liste qui contient 512² (nombre variable en réalité) valeurs, que j'ai restructuré en une matrice 512*512 (via le module PIL de python) pour en créer l'image.

    Je travaille désormais cette image.

    Mon but est de pouvoir détourer un objet, une partie de la dite image (forme quelconque, parfois biscornue) via le tracé d'un polygone sur cette image.

    Je voudrais que pour les points appartenant au polygone crée (points inclus dans le polygone), on conserve la valeur dans la liste.
    Si le point n'est pas dans le polygone, on attribue la valeur 0 dans la liste.

    En d'autre termes, mon objectif est de rogner l'image (mais en conservant l'aspect numérique derrière (il s'agit d'un aspect central pour mon travail)

    J'espère avoir été clair, dîtes-le si ce n'est pas le cas.

    Merci d'avance à qui voudra (pourra) bien m'aider !

  2. #2
    Expert éminent

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

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

    Je pense que l'histogramme de PIL te permet de récupérer les valeurs de pixels sous forme de liste, connaissant la largeur de ton image, tu devrais pouvoir récupérer les valeurs qui t'intéresse.

    La difficulté me semble plutôt de savoir si un pixel (déterminé par ses coordonnées orthogonales) se trouve dans ta forme si celle-ci est quelconque.

    Ensuite, je suppose que tu voudras que la partie d'image rejetée soit transparente, tu ne pourras pas te contenter de mettre ses pixels à zéro, il faudra surtout mettre leur canal alpha, le quatrième octet, à zéro lui aussi, ce qui implique un format qui le supporte.

    PNG par exemple.

  3. #3
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour

    Disons que j'ai bien une idée d'algorithme mais elle me parait assez lourde à faire, et je n'ai pas d'idée de comment l'écrire, si quelqu'un avait une idée....

    On trace le polygone
    On récupère les coordonnées des pixels du contour du polygone.
    On choisit un point référence (disons le pixel haut gauche de l'image (on pense bien évidemment que celui ci ne fera pas partie du polygone))
    Pour chaque pixel de l'image on compte le nombre de pixels communs (coordonnées communes) entre celles du contour du polygone récupèrées ci avant et celle du segment entre le pixel variable et le point fixe.
    Si le nombre est pair le point est à l'extérieur du polygone
    Si c'est impair, le point est dans le polygone.

  4. #4
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Bonjour,

    tu peux simplement créer une nouvelle image blanche dans laquelle tu dessines ton polygone en noir puis faire une difference sur les deux images:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # -*- coding: utf-8 -*-
    import Image, ImageDraw, ImageChops
     
    python = Image.open('python.jpg')
    masque = Image.new('RGB', python.size, color=(255,255,255))
     
    polygone_coords = (10,10,100,100,200,200,300,200,300,100)
    masque_draw = ImageDraw.Draw(masque)
    masque_draw.polygon(polygone_coords, fill=(0,0,0))
     
    diff = ImageChops.lighter(python, masque)
    python.show()
    masque.show()
    diff.show()
    Images attachées Images attachées    

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

Discussions similaires

  1. Copier une partie d'une form dans une image
    Par Duan dans le forum Débuter
    Réponses: 5
    Dernier message: 11/05/2009, 16h16
  2. donner une couleur a une partie d'une forme
    Par ralf91 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/04/2008, 17h02
  3. Sélectionner seulement une partie d'une valeur d'une cellule
    Par ArthurO0O dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2007, 11h05
  4. Réponses: 3
    Dernier message: 31/10/2006, 12h20
  5. masquer une partie d'une vidéo par une banniere
    Par lezabour dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 16/10/2006, 16h47

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