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 :

Cropping via numpy ou scipy


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut Cropping via numpy ou scipy
    Bonjour,
    j'ai mis ci-dessous un code, utilisant PIL, qui permet de rogner une figure puis lui ajoute un mini-cadre bleu.

    J'aimerais savoir comment faire cela via numpy ou scipy, si bien tendu cela est faisable.

    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
     
    #! /usr/bin/env python
    #coding=utf-8
     
    # SOURCE : http://www.developpez.net/forums/d857722/autres-langages/python-zope/general-python/rogner-automatiquement-image/
    import Image
     
    im = Image.open("test.png")
    pix = im.load()
    width, height = im.size
     
    left,top,right, bottom =-1, -1, -1, -1
     
    for left in xrange(width):
        if any( pix[left,y][:3] != (255,255,255) for y in xrange(height)):
            break
     
    for right in xrange(width-1,left,-1):
        if any( pix[right,y][:3] != (255,255,255) for y in xrange(height)):
            break
     
    for top in xrange(height):
        if any( pix[x,top][:3] != (255,255,255) for x in xrange(width)):
            break
     
    for bottom in xrange(height-1,top,-1):
        if any( pix[x,bottom][:3] != (255,255,255) for x in xrange(width)):
            break
     
     
    im = im.crop((left,top,right+1,bottom+1))
     
    # We add a marg around the picture.
    width, height = im.size
    L = 20
    color = "blue"
     
    imL = Image.new("RGB", (width+2*L, height+2*L), color)
    imL.paste(im, (L, L))
    imL.save("test-margin.png")

  2. #2
    Membre averti Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Points : 302
    Points
    302
    Par défaut
    Salut,
    Avec l'opérateur de slice tu devrais t'en sortir. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    import numpy as np
    #creation d'une image quelconque
    im = np.array( [ [1,2,3], [4,5,6], [7,8,9] ])
    #creation d'une image remplie de 0
    other_im = np.array( [ [0,0,0], [0,0,0], [0,0,0] ])
    #copie d'une sous partie de im dans other_im
    other_im[0:2,0:2] = im[0:2,0:2]

  3. #3
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Merci mais cela ne règle pas le principal problème. Quelle serait la méthode la plus efficace pour retirer les pixels autour qui sont d'une couleur blanche par exemple ?

    De plus, comme récupère-t-on une image depuis numpy si c'est faisable ?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    Par défaut
    oops, j' ai supprimé mon message entre temps voyant que j'étais hors-sujet ...

    prendre la couleur du 1er pixel(0,0) comme référence ?

  5. #5
    Membre averti Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Points : 302
    Points
    302
    Par défaut
    Il n'y a pas de méthode pour récupérer une image rgb depuis numpy (formats classiques bmp, png, jpg, etc.). Dans ce cas il faut passer par une lib tiers comme PIL ou matplotlib (qui fait ca je crois). Pour lire des données brut format ascii, numpy fournit la méthode loadtxt().


    Sinon une méthode simple renvoyant les positions du cadre (testé à moitié, crash sur une image entièrement blanche):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import numpy as np
     
    def borders(im, color):
     
        left,right,top,bottom = -1,-1,-1,-1
     
        non_color_pix = np.where(im != color)
        top = non_color_pix[0].min()
        bottom = non_color_pix[0].max()
        left = non_color_pix[1].min()
        right = non_color_pix[1].max()
     
        return (left,right,top,bottom)

  6. #6
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Merci pour ces infos.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/08/2014, 21h35
  2. Calculer les facettes d'une surface via Numpy
    Par rambc dans le forum Calcul scientifique
    Réponses: 0
    Dernier message: 24/12/2009, 16h25
  3. [SciPy & NumPy] Noms des fonctions
    Par Super mario dans le forum Calcul scientifique
    Réponses: 4
    Dernier message: 07/08/2008, 01h40
  4. Divers problèmes de matrice passant de numpy a scipy
    Par thance dans le forum Calcul scientifique
    Réponses: 25
    Dernier message: 12/06/2007, 23h33

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