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 :

Problème de découpage d'images


Sujet :

Python

  1. #1
    Invité
    Invité(e)
    Par défaut Problème de découpage d'images
    Bonjour tout le monde, je suis actuellement....bloqué..
    Dans un programme, je cherche à recouvrir un polygone avec une portion d'image (de même dimension que le polygone), pour faire une sorte de fond pour ce dernier.
    Pour arriver à cela, j'avais pensé découper une portion de ladite image selon le polygone désiré, pensant qu'il existait une fonction qui, quand on lui donnait les coordonnées du polygone et l'image originale, retournait une partie de l'image avec la forme désirée. Malheureusement, je n'ai pas trouvé une telle fonction...

    Savez-vous si une fonction de ce genre existe, et si non, connaissez-vous une solution à mon problème?

    D'avance merci

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 32
    Points : 36
    Points
    36
    Par défaut
    Tu peux toujours créer cette dite fonction.
    Avec la bibliothèque PIL tu peux faire du traitement d'image.
    Regarde déjà ce que cette bibliothèque propose comme outils.

    Si rien n'est satisfaisant, avec les fonction getpixel() et putpixel() il y a moyen de fabriquer une fonction qui va découper ta photo en suivant la forme donné.

    Admettons que le polygone soit remplie d'une seul et même couleur qui a pour code RVB: (0, 255, 0) (c'est donc du vert "pur"), et qui est sur un fond blanc (code RVB: (255, 255, 255)).
    Tu crées une double boucle for qui va parcourir tous les pixel de 2 images en simultanée. Si sur le cadre getpixel() détecte du vert on est dans le polygone, on peut donc coller le pixel de la photo.

  3. #3
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Citation Envoyé par oscar1996 Voir le message
    Dans un programme, je cherche à recouvrir un polygone avec une portion d'image (de même dimension que le polygone), pour faire une sorte de fond pour ce dernier.
    Il viens d’où ce 'polygone' ? Quel GUI utilisez vous pour l'afficher ?
    Donnez nous un minimum de code.

    @+
    Merci d'utiliser le forum pour les questions techniques.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Merci, TimDark, je vais essayer ça

    Le programme que j’écris est un programme d'aide à la mémorisation de schémas ( je prendrai comme exemple un schéma des muscles faciaux),utilisant Tkinter comme interface graphique.

    Le script contient une liste dont chaque item contient:
    1) -Un nom de polygone(ici de muscle);
    2) -Des coordonnées de polygone. chaque binôme de coordonnées représente un point se situant à intervalles (+ ou -) réguliers, autour du muscle portant le nom en 1). Par conséquent, plus le polygone aura de points, plus il sera représentatif du muscle. Concernant le provenance de ces coordonnées, je les ai définies à la main, c'est donc pas super précis et très long...Je travaille sur une MAJ du script permettant à l'utilisateur de créer automatiquement des polygones en cliquant sur l'image, et de changer de schéma.

    Le Programme crée automatiquement les polygones contenu dans la liste. Il sont créés TRANSPARENTS (option fill = ""), et il sont automatiquement "bindés" à des fonction qui les colorent à chaque fois que le curseur entre dans leur zone, et qui les décolorent dès que le curseur quitte cette dernière.

    La partie qui m’intéresse est cette dernière. Quand le programme colore le polygone, il le configure et modifie l'option fill, (fill = "red"). Le problème c'est que ça fait assez crade (je trouve), et j'aimerais, au lieu de le remplir avec une couleur, découper une image (à partir d'une image "fond") ayant la forme d'un polygone à colorer, et la placer sur ce dernier.

    Un petit script valant mieux qu'un long blabla, voici le prog en question:
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    from tkinter import *
    from random import randrange
    class MyApp:
        def __init__(self, parent):
     
     
            self.canvas = Canvas(root, heigh = 450, width = 370, cursor = "target")
            self.canvas.pack()
     
            self.lab = Label(root)
            self.lab.pack(side = BOTTOM)
     
     
            self.photo=PhotoImage(file='schema.gif')
            self.canvas.create_image(177, 203, image=self.photo)
     
     
     
            self.liste =[["aab","Abaisseur de l'angle de la Bouche",[(192,385,200,386,205,385,216,381,233,371,247,357,247,342,244,332,240,316,232,312,224,326,222,340,219,350,214,359,205,370,200,376,192,383,192,385),(160,384,142,367,134,355,127,337,126,332,125,327,121,322,119,320,114,312,110,316,108,316,105,325,104,333,103,343,103,348,108,355,116,361,124,368,135,375,145,380,154,384,160,384)]],["eli","Abaisseur de la levre inferieure",[(203,373,214,360,220,348,224,336,224,333,220,333,215,339,205,343,195,344,189,342,184,340,182,340,192,354,197,361,200,366),(246,344,250,347,253,350,251,353,248,356,248,352,248,347,246,344),(148,374,153,361,163,348,168,343,155,344,146,342,138,338,129,332,125,330,128,339,134,355,140,364,146,371)]],["m","Mentonnier",[(189,380,198,362,184,344,176,363,185,378),(163,380,174,374,176,364,167,344,162,350,159,354,156,358,154,359,158,372,161,377)]],["r","",[(115,313,109,316,101,314,96,309,90,303,86,301,82,299,78,299,76,292,80,292,84,292,89,296,95,301,101,305,105,305,108,304,111,301,112,298,111,305,112,310,115,312,115,313),(233,311,236,314,240,315,245,314,249,312,254,309,258,307,262,305,268,304,274,303,276,302,278,297,273,297,264,299,259,300,252,303,247,305,244,306,242,305,238,303,236,301,235,300,235,304,234,308,233,311)]],
                         ["gz","Grand zygomatique",[(235,299,246,286,261,274,267,268,272,260,280,251,288,241,295,233,300,229,290,225,282,232,273,241,265,250,259,256,246,269,237,278,231,284,228,285,231,289,233,295),(112,297,124,284,61,225,51,229,74,255,78,260,81,265,89,274,98,282,107,289,111,295,111,298,116,290)]],["pz","Petit zygomatique",[(135,279,133,270,129,264,124,255,117,247,109,240,100,234,95,230,92,228,86,228,82,229,82,229,79,229,85,234,92,239,99,244,107,251,114,260,117,265,122,271,123,273,122,277,123,282,123,284,127,281,131,279,135,278),(227,285,228,277,230,269,235,262,239,257,244,251,248,247,253,244,258,240,263,237,271,232,265,231,259,230,258,230,251,234,246,237,241,240,237,244,237,244,232,248,228,253,223,259,219,267,218,273,217,277,218,279,221,280,224,283,227,285,227,277)]],["elsan","Elevateur de la levre inferieure et de l'aile du nez",[(136,276,137,260,138,250,141,241,142,233,148,223,152,212,158,198,160,187,162,180,163,171,162,165,164,171,166,177,167,184,166,189,165,196,162,203,158,213,154,223,151,229,146,240,143,248,142,255,144,262,147,268,148,270,148,273,144,274,142,275,138,277,136,277),(216,279,214,263,212,252,210,244,206,232,202,223,199,216,196,208,192,197,189,185,188,174,189,164,186,173,185,183,184,191,185,194,189,204,191,212,195,220,198,228,201,235,205,242,208,251,208,256,207,262,205,266,203,269,202,274,207,276,211,278,215,278,214,270)]],
                         ["p","Procerus",[(184,195,184,189,184,182,185,177,186,173,187,168,188,164,188,161,184,158,179,155,175,155,172,156,169,157,166,157,163,157,164,163,165,169,166,176,167,183,166,190,165,196,169,193,172,191,176,189,181,192,185,195)]],["e","Epicranien",[(176,156,169,155,165,158,161,154,157,154,150,144,141,136,133,131,123,128,112,128,102,131,92,136,84,139,81,140,84,138,85,131,87,121,87,112,85,104,83,94,81,87,77,84,78,78,82,78,83,74,87,72,90,70,91,67,89,66,93,66,93,63,94,58,95,55,98,54,99,49,101,45,105,45,105,43,111,39,120,41,124,44,132,44,134,43,138,47,146,56,154,65,162,74,165,82,171,92,175,104,176,116,177,127,177,138,177,146,177,153,172,155,166,156,163,158),(180,156,190,160,197,156,201,150,208,142,221,133,231,130,239,129,250,130,259,134,266,137,272,140,276,141,272,139,270,130,269,118,270,105,272,96,276,88,277,86,276,78,272,78,273,74,269,73,267,68,263,67,262,56,258,55,258,49,255,46,251,46,251,40,246,40,238,41,232,44,229,44,223,45,215,51,207,60,200,67,194,75,187,85,184,94,181,106,179,116,178,130,178,138,179,149,178,154,183,156,190,160)]],
                         ["ooo","Orbitaire orbiculaire de l'oeil",[(157,190,158,185,160,176,160,163,154,151,143,139,135,133,128,130,122,127,114,127,108,129,98,133,90,136,84,140,79,140,75,145,72,152,70,157,66,166,66,173,64,181,64,193,65,199,68,206,71,212,78,219,88,225,106,230,121,229,131,225,140,218,151,207,156,198,158,188,160,177,161,173,150,177,150,182,143,183,140,185,137,189,129,193,119,196,113,198,105,198,98,196,91,194,87,190,84,186,82,184,85,177,90,172,97,165,105,163,116,163,125,164,131,168,136,172,141,176,145,176,149,176,149,179,149,182,158,190),(193,180,194,167,198,155,205,146,214,138,226,131,238,128,247,129,254,132,263,136,272,140,277,142,282,147,284,153,288,161,290,170,292,184,292,195,289,205,286,210,282,216,274,223,263,228,253,230,243,231,234,229,226,226,216,220,216,220,210,213,204,207,199,198,195,187,193,179,193,170,220,174,211,176,205,178,209,184,215,185,221,190,229,193,239,198,248,198,258,196,268,192,274,186,272,177,266,171,256,165,240,164,225,169,223,172,217,176,212,177,207,177,194,181)]],
                         ["poo","Palpebral orbiculaire de l'oeil",[(149,176,143,176,140,175,137,172,133,169,128,167,123,165,117,163,108,162,100,164,94,165,92,168,88,172,85,177,85,180,84,182,83,182,84,185,86,187,88,192,94,195,100,196,106,197,112,198,119,197,126,194,131,192,135,189,138,187,140,185,141,183,144,183,148,182,150,180,149,178,148,176),(207,183,207,179,211,179,215,177,220,173,226,170,232,166,239,163,245,162,251,162,258,165,262,167,266,172,270,176,272,182,274,184,272,186,266,192,260,196,254,197,248,198,241,198,235,196,229,194,224,191,222,188,220,186,215,185,212,183,211,183,208,182)]],["ob","Orbiculaire de la bouche",[(218,302,206,295,194,289,188,288,183,289,179,290,175,291,170,289,166,288,163,287,159,289,152,292,143,296,136,300,133,304,139,310,147,313,155,315,164,317,175,318,187,317,200,313,210,308,215,304,218,301,234,294,235,300,233,309,229,319,222,330,213,338,208,341,203,343,197,343,192,342,182,340,177,339,170,342,160,344,151,342,141,338,128,331,121,323,116,314,113,306,114,295,119,287,132,280,144,275,153,272,158,270,160,266,160,265,162,266,164,267,168,268,173,267,175,265,178,266,182,268,184,267,188,265,189,269,191,271,199,273,205,276,215,278,222,281,228,285,232,292,234,296,235,300,234,306)]],
                         ["b","Buccinateur",[(101,282,97,302,101,303,106,304,110,303,111,300,111,296,111,292,108,290,106,287,103,285,101,283),(116,278,117,273,104,266,105,269),(236,298,239,303,242,304,245,305,248,304,250,303,253,302,256,302,256,297,255,293,254,289,254,285,254,280,248,285,243,289,240,293,236,296,236,300),(231,282,241,274,231,280),(241,320,250,315,257,309,254,309,250,311,245,314,240,315,241,317)]],["els","Elevateur de la levre superieure",[(121,230,129,227,134,223,141,219,141,224,142,230,142,235,140,240,138,246,137,255,136,262,135,270,135,273,133,267,131,263,130,257,129,249,126,242,124,237,123,231,122,229),(215,264,216,256,220,247,223,239,227,232,231,229,225,227,220,224,218,221,211,215,210,222,208,226,207,229,209,235,211,240,212,248,214,257,214,260,215,265),(201,274,205,265,200,265,199,273)]],["eab","Elevateur de l'angle de la bouche",[(131,264,130,252,125,238,121,228,117,230,113,230,114,238,115,245,120,250,125,255,129,261,131,263),(123,284,123,276,121,270,116,263,116,278,116,279,119,281),(215,279,215,269,214,264,217,256,219,246,225,235,230,229,232,230,237,231,234,238,233,244,233,247,227,255,222,261,219,267,218,271),(231,284,230,269,227,276,227,284)]]]
     
            self.dic = dict()
            i = 0
            for item in self.liste:
                litem = list()
                for x in range(len(item[2])):
                    litem.append(i+x)
                    self.dic[i+x] = self.canvas.create_polygon(item[2][x],smooth = 1, fill = "", width = 2, outline = "")
                for item2 in litem:
                    self.canvas.tag_bind(self.dic[item2], "<Enter>", lambda x,y = litem :self.coloration(y))
                    self.canvas.tag_bind(self.dic[item2], "<Leave>", lambda x,y = litem :self.decoloration(y))
                    self.canvas.tag_bind(self.dic[item2], "<Button-1>", lambda x,y = item[0] :self.check(y))
                i = i+x+1
     
     
     
            self.choixnum()
        def coloration(self,x):
            for item in x:
                self.canvas.itemconfigure(self.dic[item], fill = "red")
        def decoloration(self,x):
            for item in x:
                self.canvas.itemconfigure(self.dic[item], fill = "")
     
        def choixnum(self):
            x = randrange(len(self.liste))
            self.rep = self.liste[x][0]
            self.lab.config(text = self.liste[x][1])
     
        def check(self,x):
            if self.rep == x:
                self.choixnum()
     
    root = Tk()
    myapp = MyApp(root)
    root.mainloop()
    Merci de vos réponses rapides!!

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'ai oublié de vous donner l'image allant avec le programme (si on veut le faire marcher c'est utile....)
    Images attachées Images attachées  

  6. #6
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Il serait plus rapide et propre de faire un 'cache' avec un gif transparent et de positionner un create_image sur la zone.
    Après vous configurez l'item avec photo="" ou photo=nomdelimage.
    Habituellement les méthodes .get/.getpixel et autres sont longues et de toute manière ne correspond pas à votre demande.

    @+

    Edit:
    Citation Envoyé par PauseKawa Voir le message
    faire un 'cache' avec un gif transparent et de positionner un create_image sur la zone.
    Facile à partir de votre image avec un éditeur d'image style gimp.
    Merci d'utiliser le forum pour les questions techniques.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Chouette, merci!!
    je vais voir ça

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

Discussions similaires

  1. programme de découpage d'image problème
    Par Battant dans le forum ImageJ
    Réponses: 0
    Dernier message: 27/08/2009, 14h44
  2. Réponses: 13
    Dernier message: 23/12/2004, 18h01
  3. [débutant] problème de lecture d'image
    Par shura dans le forum OpenGL
    Réponses: 16
    Dernier message: 03/07/2004, 18h05
  4. Problème de nb d'images par seconde
    Par Francky033 dans le forum DirectX
    Réponses: 7
    Dernier message: 17/04/2004, 10h37
  5. Problème de mémoire Affichage images
    Par Repti dans le forum C++Builder
    Réponses: 6
    Dernier message: 29/03/2004, 20h06

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