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

Calcul scientifique Python Discussion :

Problème pywt - PIL (double/entiers)


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut Problème pywt - PIL (double/entiers)
    Bonsoir,
    J'utilise la lib PIL pour ouvrir et enregistrer des JPEG.
    J'utilise aussi Pywt pour faire le transformée en ondelettes discrète.
    Le truc, et c'est mon problème, c'est que je sais convertir chaque composante (R,G,B) de mon image, et je souhaite recréer une image réduite de moitié par les ondelettes.
    Malheureusement, cette dernière étape ne fonctionne pas, je pense que c'est dû au fait que la fonction pywt.dwt() me renvoie une liste (à priori) de double, et qu'il me faut des int.

    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
     
    R,G,B=im.split();
     
    R=list(R.getdata());
    G=list(G.getdata());
    B=list(B.getdata());
     
    (RA,RD)=pywt.dwt(R,'db2','sp1')
    (GA,GD)=pywt.dwt(G,'db2','sp1')
    (BA,BD)=pywt.dwt(B,'db2','sp1')
     
    #C'est normal, la suite, je réagrandi avec erreur
     
    RA=pywt.idwt(RA, None, 'db2', 'sp1')
    GA=pywt.idwt(GA, None, 'db2', 'sp1')
    BA=pywt.idwt(BA, None, 'db2', 'sp1')
     
    comp=(RA,GA,BA) # ICI, ça ne passe plus
    imgnew = Image.merge('RGB',comp)

  2. #2
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Voilà un code complet (copier-collé du tien) qui m'a l'air de fonctionner. J'ai pris lena.jpg ( http://images.google.fr/images?hl=fr...pg&sa=N&tab=wi ) en couleur de taille 512 par 512.
    La fonction merge demande en argument un tuple d'images, toi, tu fournissais un couple de listes.
    Enfin, au final, j'ai une image qui resemble à la première mais un peu compressé 35 ko contre 67 ko au départ

    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
     
    import pywt
    import Image
    im = Image.open('lena.jpg')
    R,G,B=im.split();
    R=list(R.getdata());
    G=list(G.getdata());
    B=list(B.getdata());
    (RA,RD)=pywt.dwt(R,'db2','sp1')
    (GA,GD)=pywt.dwt(G,'db2','sp1')
    (BA,BD)=pywt.dwt(B,'db2','sp1')
     
    RA=pywt.idwt(RA, None, 'db2', 'sp1')
    GA=pywt.idwt(GA, None, 'db2', 'sp1')
    BA=pywt.idwt(BA, None, 'db2', 'sp1')
     
    comp=(RA,GA,BA) # ICI, ca ne passe plus
    comp = (map(int,comp[0]), map(int,comp[1]), map(int,comp[2]))
    c1 = Image.new('L', (512, 512))
    c2 = Image.new('L', (512, 512))
    c3 = Image.new('L', (512, 512))
    c1.putdata(comp[0])
    c2.putdata(comp[1])
    c3.putdata(comp[2])
    imgnew = Image.merge('RGB',(c1,c2,c3))
    imgnew.save('toto.jpg')

  3. #3
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    OK, j'ai corrigé mon code en conséquence .
    Merci !
    Sinon, il est possible de faire la différence de deux images ?

  4. #4
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    oui dans le module ImageChops ( http://python.developpez.com/cours/p...imagechops.php )
    y'a la fonction difference ou substract (en fonction de ce que tu cherches)

  5. #5
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Si je veux créer une image deux fois plus grande que mon image originale (ça, je pense savoir), et mettre en haut à gauche mon image originale, je fais comment ?
    J'ai vu la méthode Image.box mais pas sûr qu'elle m'aide...

  6. #6
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Non, c'est la fonction paste

    <H3>paste

    im.paste(image, box)
    Pastes another image into this image. The box argument is either a 2-tuple giving the upper left corner, a 4-tuple defining the left, upper, right, and lower pixel coordinate, or None (same as (0, 0)). If a 4-tuple is given, the size of the pasted image must match the size of the region.
    If the modes don't match, the pasted image is converted to the mode of this image (see the convert method for details).
    im.paste(colour, box)
    Same as above, but fills the region with a single colour. The colour is given as a single numerical value for single-band images, and a tuple for multi-band images.
    im.paste(image, box, mask)
    Same as above, but updates only the regions indicated by the mask. You can use either "1", "L" or "RGBA" images (in the latter case, the alpha band is used as mask). Where the mask is 255, the given image is copied as is. Where the mask is 0, the current value is preserved. Intermediate values can be used for transparency effects.
    Note that if you paste an "RGBA" image, the alpha band is ignored. You can work around this by using the same image as both source image and mask.
    im.paste(colour, box, mask)
    Same as above, but fills the region indicated by the mask with a single colour.
    </H3>

Discussions similaires

  1. [MySQL] Problème avec un double quote
    Par wormseric dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 26/01/2007, 14h44
  2. [mysql5]problème truncated incorrect double value xx
    Par moulefrite dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 10/11/2006, 17h17
  3. [MySQL] Problème avec une double insertion
    Par warmup27 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 20/10/2006, 23h36
  4. Problème de relation double
    Par Rub-n dans le forum Access
    Réponses: 1
    Dernier message: 31/05/2006, 18h07
  5. Problème d'éxécution: double free or corruption
    Par ciol_tebroc dans le forum C++
    Réponses: 3
    Dernier message: 17/05/2006, 19h44

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