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

Bibliothèques tierces Python Discussion :

Utilisation de PIL et ImageQt en niveau de gris


Sujet :

Bibliothèques tierces Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Utilisation de PIL et ImageQt en niveau de gris
    Bonjour à tous,
    Dans le cadre d'un projet informatique, je dois afficher à l'écran des images issus de PIL. J'utilise pour cela la bibliothèque PyQt, et la méthode ImageQt.
    Lorsque j'utilise une image en couleur, tout va bien, mais si l'image de départ est en niveau de gris, alors le résultat de ImageQt.ImageQt() est entièrement blanc, avec des pixels sur 4 octets, au lieu de 8 bits...
    voila le code que j'utilise :
    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
     
    import sys
    from PyQt4 import QtGui, QtCore
    from PIL import Image, ImageQt
     
     
    class Window(QtGui.QLabel):
        def __init__(self, parent=None):
            QtGui.QLabel.__init__(self)
            self.setGeometry(300, 300, 250, 150)
            self.setWindowTitle('Window')
            self.img = Image.open("img1.jpg","r")
            print(self.img.getbands())
            print(self.img.getpixel((30,30)))
    	print(self.img.getpixel((25,25)))
    	self.qimg=ImageQt.ImageQt(self.img)
     
            print(self.qimg.pixel(25,25))
            print(self.qimg.pixel(30,30))
            print(self.qimg.depth()) 
            self.pix=QtGui.QPixmap.fromImage(self.qimg)
            self.setPixmap(self.pix)
     
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
    Quelqu'un a t il une idée ??
    Merci d'avance, car là je sèche désespérément !
    Cedric

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut, en fait cela paraît normal.

    Le code de ImageQt.py (Pil)

    (extrait)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            elif im.mode == "RGB":
                data = im.tostring("raw", "BGRX")
                format = QImage.Format_RGB32
    en testant avec une image b/w et en rajoutant une ligne à ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            print "mode: ", self.img.mode
    j'ai le résultat
    vincent@tiemoko:~/Bureau$ python img.py
    mode: RGB
    ('R', 'G', 'B')
    (0, 0, 0)
    (0, 0, 0)
    0
    0
    32
    Et l'image affichée dans le label est conforme à ce que j'attendais.

    De toutes façons, Qt te permet de convertir cette image dans un autre format. Si ton intention est de travailler l'image avec QPainter il suffit d'ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    img = self.qimg.convertToFormat(QtGui.QImage.Format_ARGB32_Premultiplied)
    Ou éventuellement convertir avec PIL avant d'en faire une QImage en fonction du résultat que tu attend, voici les modes de conversion de ImageQt.py
    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
     
    # Copyright (c) 2006 by Secret Labs AB
    # Copyright (c) 2006 by Fredrik Lundh
            if im.mode == "1":
                format = QImage.Format_Mono
            elif im.mode == "L":
                format = QImage.Format_Indexed8
                colortable = []
                for i in range(256):
                    colortable.append(rgb(i, i, i))
            elif im.mode == "P":
                format = QImage.Format_Indexed8
                colortable = []
                palette = im.getpalette()
                for i in range(0, len(palette), 3):
                    colortable.append(rgb(*palette[i:i+3]))
            elif im.mode == "RGB":
                data = im.tostring("raw", "BGRX")
                format = QImage.Format_RGB32
            elif im.mode == "RGBA":
                try:
                    data = im.tostring("raw", "BGRA")
                except SystemError:
                    # workaround for earlier versions
                    r, g, b, a = im.split()
                    im = Image.merge("RGBA", (b, g, r, a))
                format = QImage.Format_ARGB32

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,
    Merci pour ta réponse,
    en fait, chez moi, cela ne fonctionne pas. l'image dans PIL est bien de type L,
    et apparaît avec une profondeur de 8 bits, mais le contenu des pixels est sur 32 bits, avec la valeur max :

    clacharm@POSEIDON:~/Dropbox/Boulot Alain$ python essaiImageQt.py
    ('L',)
    93
    165
    mode: L
    4294967295
    4294967295
    8
    J'ai rajouté la ligne print "mode : " + self.img.mode
    J'utilise PIL pour travailler sur les images, et au dernier moment, je veux les afficher avec ImageQt.
    Est ce qu'il faut convertir l'image PIL avant de la transformer en image QT ?
    bonne soirée

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [resolu]
    Cool,
    Après essai, il suffit effectivement de convertir l'image en rgba, et tout fonctionne !!
    voilà le code modifiée :

    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
    import sys
    from PyQt4 import QtGui, QtCore
    from PIL import Image, ImageQt
     
     
    class Window(QtGui.QLabel):
        def __init__(self, parent=None):
            QtGui.QLabel.__init__(self)
            self.setGeometry(300, 300, 250, 150)
            self.setWindowTitle('Window')
            self.img = Image.open("visage1.jpg","r")
            print(self.img.getbands())
            print(self.img.getpixel((30,30)))
    	print(self.img.getpixel((25,25)))
    	print "mode: ", self.img.mode
    	self.img2=self.img.convert("RGBA")
    	print(self.img2.getbands())
            print(self.img2.getpixel((30,30)))
    	print(self.img2.getpixel((25,25)))
    	print "mode: ", self.img2.mode
    	self.qimg=ImageQt.ImageQt(self.img2)
            print(self.qimg.pixel(25,25))
            print(self.qimg.pixel(30,30))
            print(self.qimg.depth()) 
            self.pix=QtGui.QPixmap.fromImage(self.qimg)
            self.setPixmap(self.pix)
     
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
    Merci beaucoup et bonne soirée

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

Discussions similaires

  1. Utilisation des triggers pour un update (niveau débutant)
    Par bipbip2006 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/11/2010, 09h16
  2. Réponses: 8
    Dernier message: 17/04/2005, 19h58
  3. Image en niveau de gris
    Par SteelBox dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/10/2003, 17h04
  4. conversion bmp en niveau de gris
    Par hholivier dans le forum C++Builder
    Réponses: 6
    Dernier message: 19/06/2003, 13h34
  5. niveau de gris en niveau de couleur
    Par corey_jx dans le forum MFC
    Réponses: 2
    Dernier message: 11/06/2003, 22h36

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