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 :

Supprimer la partie haute d'une image.


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 12
    Par défaut Supprimer la partie haute d'une image.
    Bonjour, je suis en train de créer un programme me permettant de détecter des formes dans une image, voici cette image que j'utilise actuellement comme base.Nom : Sans titre.jpg
Affichages : 655
Taille : 1,2 Ko
    J'arrive à détecter la première forme (celle du haut) mais pas la deuxième, mon but est qu'une foi la première détecter le programme reparte à partir de la hauteur de la partie basse de la forme pour ensuite poursuivre l'analyse sans repartir du haut et qu'il puisse détecter la seconde forme.
    Cependant, pour ce faire j'ai essayé de supprimer de la hauteur de l'image la coordonnée en y du point que je détecte de la forme (le point rouge sur l'image) mais cela enlève la partie basse de l'image, j'aimerais que ce soit la partie haute, comment faire ?

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Difficile de répondre sans voir comment est organisé ton code, mais tu devrais pouvoir faire ça simplement avec une boucle.

    Par exemple en pseudo code:
    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
     
    def scan_image(x, y):
        parcours des pixels
        detection du début de la forme -> beginx, beginy
        detection de la fin de la forme -> endx, endy
        return (beginx, beginy, endx, endy)
     
     
    maxy = hauteur image
    x = y = 0
     
    while y < maxy:
        forme = scan_image(x, y)
        sauvegarde de la forme
        x, y = forme[2:]

  3. #3
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Citation Envoyé par VinsS Voir le message
    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
     
    def scan_image(x, y):
        parcours des pixels
        detection du début de la forme -> beginx, beginy
        detection de la fin de la forme -> endx, endy
        return (beginx, beginy, endx, endy)
     
     
    maxy = hauteur image
    x = y = 0
     
    while y < maxy:
        forme = scan_image(x, y)
        sauvegarde de la forme
        x, y = forme[2:]
    Attention : après détection du premier rectangle sombre, repartir du endx ne permettra pas de bien détecter le second rectangle (dont le startx est inférieur au endx du premier rectangle).

    Attention aussi à la détection du premier rectangle sombre où un pixel (101, 85, 88) rouge se ballade au milieu de pixels sombres (toutes les composantes sont inférieures au seuil de 20)

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 12
    Par défaut
    Voici mon code
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    from PIL import Image
     
    im1 = Image.open('Sans titre.jpg') #Déclaration de la variable image 1.
    L,H = im1.size #Rentre dans L et H la taille de l'image L largeur, H hauteur.
    im2 = Image.new ("L",(L,H)) #Création de la nouvelle image, elle garde les mêmes grandeurs que la première.
    im3 = Image.new ("L",(L,H)) #Création de la nouvelle image, elle garde les mêmes grandeurs que la première.
    im4 = Image.new ("L",(L,H))
     
    for y in range(H):
        for x in range(L):
            r, g, b = im1.getpixel((x,y))
            gris = (r + g +b)/3
            im2.putpixel((x,y),(gris))
    im2.save("niveau-gris.jpg")
     
    im2 = Image.open('niveau-gris.jpg')
    L,H = im2.size
    seuil=20                          #int(input("Choississez le seuil, entre 0 et 255")) #On demande à l'utilisateur la valeur du seuil qu'il souhaite.
    for y in range(H): #Pour y prenant sa valeur dans H.
        for x in range(L): #Pour x prenant sa valeur dans L.
            p = im2.getpixel((x,y)) # p prend la valeur de chaque pixel de l'image 1.
            if p >=seuil: #Si p est supérieur ou égal au seuil,
                im3.putpixel((x,y),(255)) #On fixe la valeur du pixel à 255 (blanc).
            if p <seuil: #Si p est inférieur au seuil,
                im3.putpixel((x,y),(0)) #On fixe la valeur du pixel à 0 (noir).
    im3.save("image-seuillage.jpg") #On sauvegarde l'image.
     
    f=0
    u=0
    g=0
    coorp1=0,0
    hauteur=0
    L, H = im3.size
    for y in range(H) :
        a=0
        for x in range(L) :
            m = im3.getpixel((x,y))
            n = im3.getpixel((x-a,y))
            a=1
            if m!=n :
                u = x   #Pour compter à partir du x où sa change
                g = y
                for x in range(L-u):
                    p = im3.getpixel((x,y))
                    if p <= 20 :
                        f = f+1
                        if f == 20 :
                            coorx1 = x
                            for y in range(H-g):
                                p = im3.getpixel((x,y))
                                if p <=20 :
                                    hauteur = hauteur + 1
                                    if hauteur == 6 :
                                        coory1 = y
                                        coorp1 = coorx1,coory1
    print(coorp1)
     
    hauteur = 0
    f = 0
    coorx2 = 0
    coory2 = 0
    coorp2 = 0, 0
    u = 0
    g = 0
    L, coory1 = im3.size
    for y in range(coory1-1) :
        a=0
        for x in range(L) :
            m = im3.getpixel((x,y))
            n = im3.getpixel((x-a,y))
            a=1
            if m!=n :
                u = x   #Pour compter à partir du x où sa change
                g = y
                for x in range(L-u):
                    p = im3.getpixel((x,y))
                    im4.putpixel((x,y),(120))
                    if p <= 20 :
                        f = f+1
                        if f == 20 :
                            coorx2 = x
                            for y in range(coory1-g-1):
                                p = im3.getpixel((x,y))
                                im4.putpixel((x,y),(120))
                                if p <=20 :
                                    hauteur = hauteur + 1
                                    if hauteur == 5 :
                                        coory2 = y
                                        coorp2 = coorx2, coory2
                                        im4.show()
                                        im4.save("im4.jpg")
     
     
    print(coorp2)
    Il me faudrait le truc qui me permet d'enlever la partie haute de l'image pour que je parte à partir de ça avec mon for y in range()

  5. #5
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Le "truc" qu'il te faut, c'est de mettre le scan de ton image dans une fonction.

    Après, on verra plus clair.

Discussions similaires

  1. Supprimer une partie d'une image avec GD
    Par cr0wseb dans le forum Langage
    Réponses: 1
    Dernier message: 24/01/2011, 11h49
  2. [XL-2003] supprimer la partie barrée d'une cellule
    Par bart13300 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/08/2009, 14h38
  3. 1 Partie seulement d'une image qui soit cliquable.
    Par levirus93700 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 04/05/2008, 10h26
  4. [MFC] Get une partie definie d'une image
    Par kabil.cpp dans le forum MFC
    Réponses: 1
    Dernier message: 12/05/2006, 09h49

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