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

PyQt Python Discussion :

Fonction grayscale


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    cellule38
    Invité(e)
    Par défaut Fonction grayscale
    Bonjour, j'ai codé cela afin d'ouvrir une image dans un label, mais j'ai un problème sur ma fonction grayscale. En effet je voudrais appliquer à l'image ouverte un dégradé noir et blanc. Mais cela ne marche pas.

    Aidez moi svp

    Voici le 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
     
    #programme permettant l'ouverure d'une image
     
    import sys
    import PIL
    import numpy
    import colorsys
     
    from PyQt4 import QtGui, QtCore
    from PyQt4.QtGui import *
    import Image
    import code
     
    class Mainwindow(QtGui.QMainWindow):
            def __init__(self):
     
                    QtGui.QMainWindow.__init__(self)
     
                    self.resize(500,300)
                    self.setWindowTitle("Ouvrir une image")
     
                    open = QtGui.QAction("Ouvrir", self)
                    open.setShortcut("Ctrl+o")
                    self.connect(open, QtCore.SIGNAL("triggered()"),self.Ouvrir)
     
                    quit = QtGui.QAction("Exit", self)
                    quit.setShortcut('Ctrl+q')
                    self.connect(quit, QtCore.SIGNAL("triggered()"),QtCore.SLOT("close()"))
     
     
     
                    grayscale = QtGui.QAction("Grayscale",self)
                    self.connect(grayscale, QtCore.SIGNAL("triggered()"),self.Grayscale)
     
                    blue_red = QtGui.QAction("French Flag Smooth",self)
     
                    incandescent = QtGui.QAction("Incandescent",self)
     
                    menu = self.menuBar()
                    fichier = menu.addMenu("Fichier")
                    fichier.addAction(open)
                    fichier.addAction(quit)
                    degrade = menu.addMenu("Dégradé")
                    degrade.addAction(grayscale)
                    degrade.addAction(blue_red)
                    degrade.addAction(incandescent)
     
            def Ouvrir(self):
                    source = str(QtGui.QFileDialog.getOpenFileName(self, "Ouvrir", ""))
                    im = QtGui.QImage(source)
     
                    self.label = QtGui.QLabel(self)
                    self.label.setPixmap(QtGui.QPixmap.fromImage(im))
                    self.area = QtGui.QScrollArea(self)
                    self.area.setWidget(self.label)
                    self.setCentralWidget(self.area)
     
            def Grayscale(im):
                    im.Ouvrir()
                    table = []
                    for i in range(256):
                           table.append(qRgb(i,i,i))
                    im.toRgb(table)
     
     
     
     
     
     
     
     
     
     
    app = QApplication([])
    main= Mainwindow()
    main.show()
    sys.exit(app.exec_())

    Je ne voudrais pas rappeler la fonction ouvrir dans grayscale, je voudrais ouvrir l'image souhaité et lorsque je clique sur grayscale, l'image devient en noir et blanc.


    Merci d'avance
    Dernière modification par pacificator ; 22/04/2010 à 12h28.

  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, tu es sur de ton code ? la fonction dégradé relance l'ouverture d'un fichier, j'ai commenté la ligne im.Ouvrir() et là on obtiens un message d'erreur :

    Traceback (most recent call last):
    File "grayscale.py", line 64, in Grayscale
    im.toRgb(table)
    AttributeError: toRgb
    Comme ça c'est mieux, on sait où chercher maintenant.

    Autre erreur, la fonction grayscale attend im et reçoit self.
    Corrigé comme ceci:
    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
     
    ...        def Ouvrir(self):
                    source = str(QtGui.QFileDialog.getOpenFileName(self, "Ouvrir", ""))
                    self.im = QtGui.QImage(source)
     
                    self.label = QtGui.QLabel(self)
                    self.label.setPixmap(QtGui.QPixmap.fromImage(self.im))
                    self.area = QtGui.QScrollArea(self)
                    self.area.setWidget(self.label)
                    self.setCentralWidget(self.area)
     
            def Grayscale(self):
                    #im.Ouvrir()
                    table = []
                    for i in range(256):
                           table.append(qRgb(i,i,i))
                    self.im.toRgb(table)
                    self.label.setPixmap(QtGui.QPixmap.fromImage(self.im))
    Je vais jeter un oeil dans la docu pour 'toRgb' parce que j'ai un doute.

    vincent

  3. #3
    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
    Je pense que toRgb ne s'applique qu'aux QColor.
    Ce qui veut dire que tu devrais aussi extraire la table de couleur de ton image.

    http://www.riverbankcomputing.co.uk/...lor.html#toRgb

    sinon comme solution 'sur le pouce', tu peux utiliser ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            def Grayscale(self):
                    self.im.save("temp.pgm")
                    self.im = QtGui.QImage("temp.pgm")
                    self.label.setPixmap(QtGui.QPixmap.fromImage(self.im))
    Net, rapide

    vincent

  4. #4
    cellule38
    Invité(e)
    Par défaut
    Merci de ton aide, mais j'ai essayé toute tes propositions mais rien ni fais ma photo reste en couleur

  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
    Montre ton code avec ma fonction grayscale, parce que celle là j'en suis sure.

    Ton soucis doit être ailleurs.

    vincent

  6. #6
    cellule38
    Invité(e)
    Par défaut
    Voila :

    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
     
    #programme permettant l'ouverure d'une image
     
    import sys
    import PIL
    import numpy
    import colorsys
     
    from PyQt4 import QtGui, QtCore
    from PyQt4.QtGui import *
    import Image
    import code
     
    class Mainwindow(QtGui.QMainWindow):
            def __init__(self):
     
                    QtGui.QMainWindow.__init__(self)
     
                    self.resize(500,300)
                    self.setWindowTitle("Ouvrir une image")
     
                    open = QtGui.QAction("Ouvrir", self)
                    open.setShortcut("Ctrl+o")
                    self.connect(open, QtCore.SIGNAL("triggered()"),self.Ouvrir)
     
                    quit = QtGui.QAction("Exit", self)
                    quit.setShortcut('Ctrl+q')
                    self.connect(quit, QtCore.SIGNAL("triggered()"),QtCore.SLOT("close()"))
     
     
     
                    grayscale = QtGui.QAction("Grayscale",self)
                    self.connect(grayscale, QtCore.SIGNAL("triggered()"),self.Grayscale)
     
                    blue_red = QtGui.QAction("French Flag Smooth",self)
     
                    incandescent = QtGui.QAction("Incandescent",self)
     
                    menu = self.menuBar()
                    fichier = menu.addMenu("Fichier")
                    fichier.addAction(open)
                    fichier.addAction(quit)
                    degrade = menu.addMenu("Dégradé")
                    degrade.addAction(grayscale)
                    degrade.addAction(blue_red)
                    degrade.addAction(incandescent)
     
            def Ouvrir(self):
                    source = str(QtGui.QFileDialog.getOpenFileName(self, "Ouvrir", ""))
                    im = QtGui.QImage(source)
     
                    self.label = QtGui.QLabel(self)
                    self.label.setPixmap(QtGui.QPixmap.fromImage(im))
                    self.area = QtGui.QScrollArea(self)
                    self.area.setWidget(self.label)
                    self.setCentralWidget(self.area)
     
            def Grayscale(self):
                    self.im.save("new.jpg")
                    self.im = QtGui.QImage("new.jpg")
                    self.label.setPixmap(QtGui.QPixmap.fromImage(self.im))
     
     
     
     
     
     
     
     
    app = QApplication([])
    main= Mainwindow()
    main.show()
    sys.exit(app.exec_())

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Fonction API
    Par margilb dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/07/2002, 11h11
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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