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 :

Selection d'items dans une QGraphicScene [QtGui]


Sujet :

PyQt Python

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 102
    Par défaut Selection d'items dans une QGraphicScene
    Bonjour à tous,

    suite à mon dernier message, j'ai réussi à effectuer la transformée de Hough sur mon image.
    J'ai donc le squelette de la molécule que je souhaitais.
    Maintenant, j'aimerais sélectionner des parties de celle-ci. Pour l'instant, juste colorer la partie sélectionnée.
    Pour cela, je regarde si la position du curseur est comprise dans celle d'une des lignes dessinées si oui je colore la ligne.
    Mon soucis est que la sélection donne des résultats incohérents.
    En effet, lorsque je clique sur mon image, la coordonnée en y surtout n'est pas comprise dans la ligne sélectionnée ce qui est aberrant car la ligne est bien là :s.
    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    '''
    Draw an image with the pHT of the original one
    '''
    from skimage.transform import hough, probabilistic_hough
    from skimage.filter import canny
    from skimage import data
    from PySide import QtCore, QtGui
    import numpy as np
    import matplotlib.pyplot as plt
    import sys
     
    """
    Class line will have all the attribute of each line of the molecule
     
    """
    class Line(QtCore.QObject):
     
        def __init__(self):
            QtCore.QObject.__init__(self)
            self._start = QtCore.QPoint()
            self._end = QtCore.QPoint()
        #Get/Set for start/end of each line    
        def start(self):
            return self._start
        def setStart(self, start):
            self._start = start
        def end(self):
            return self._end
        def setEnd(self,end):
            self._end = end
     
    """
    Test of probabilistic hough and also selection of object 
    """
     
    class TestWidget(QtGui.QMainWindow):
        def __init__(self):
            super(TestWidget,self).__init__()
            self.initUI()
        def initUI(self):
            self.setGeometry(300, 300, 280, 270)
            self.setWindowTitle('Image Skeleton ')
            self._scene = QtGui.QGraphicsScene()
            self._view = QtGui.QGraphicsView(self._scene)
            self.setCentralWidget(self._view)
            # Array with items (lines) of the scene
            self._items = []
     
            self.addLines()
     
        def addLines(self):
     
            fname = "molA.bmp" #cf. rar en Pièce jointe
            image = data.imread(fname, True, None)
     
            #Border detection of the image
            edges = canny(image, 2, 1, 25)
            """
              threshold : int
                Threshold    (level of intensity between 10 and 60)    
              line_length : int, optional (default 50)
                            Minimum accepted length of detected lines.
                            Increase the parameter to extract longer lines.
            line_gap : int, optional, (default 10)
                    Maximum gap between pixels to still form a line. 
                    Increase the parameter to merge broken lines more aggresively.
            """
            lines = probabilistic_hough(edges, threshold=20, line_length=5, line_gap=3)
     
            """
            lines : list
            List of lines identified, lines in format ((x0, y0), (x1, y0)), indicating line start and end.
            """
     
            pen = QtGui.QPen()
            pen.setWidth(3) 
            for line in lines:
                p0, p1 = line
     
                """
                Each time we create a instance of Line to keep the coordinate 
                of each line drawn
                            
                """
                lineItem = Line()
                lineItem.setStart(QtCore.QPoint(p0[0],p0[1]))
                lineItem.setEnd(QtCore.QPoint(p1[0],p1[1]))
                self._items.append(lineItem)
     
                self._scene.addLine(p0[0],p0[1],p1[0],p1[1],pen)
     
     
     
        def mousePressEvent(self, event):
     
            x,y = event.pos().x(), event.pos().y()
            #Test mouse pos
            print " Pos mouse : x,y", '(',x,",",y,")" ,
     
            if event.button() == QtCore.Qt.MouseButton.RightButton:
                print "right click"
                pen = QtGui.QPen()
                pen.setWidth(3)
                pen.setColor(QtGui.QColor(QtCore.Qt.red))
                for i in range (len(self._items)):
                    item = self._items[i]
     
                    if item.start().x()<= x <= item.end().x():
                        print "x valide"
     
                        print "item start end y :" ,item.start().y(), item.end().y()
                        print "pose ee ej ne y :", y
                        """
                        FIXME:
                        bug with y coordinnates strange results not like it should be
                        y value of line are not matching y of the mouse
                        """
                        if item.start().y() <= y <= item.end().y():
                            print "if valide for x et y inside"
                            self._scene.addLine(QtCore.QLineF(item.start(),item.end()),pen)
     
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        widget = TestWidget()
        widget.resize(640, 480)
        widget.show()
        sys.exit(app.exec_())
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Selection d'items dans une SelectList
    Par Leaffy dans le forum ASP.NET MVC
    Réponses: 1
    Dernier message: 16/01/2013, 00h04
  2. [AC-2010] Impossibilité de selection d'item dans une combobox.
    Par MmD_host dans le forum VBA Access
    Réponses: 5
    Dernier message: 21/08/2012, 14h31
  3. [XL-2010] Empecher la selection d'un item dans une liste déroulante
    Par issoram dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 23/05/2012, 17h49
  4. Selection d'un item dans une listview
    Par skunkies dans le forum Windows Forms
    Réponses: 3
    Dernier message: 22/12/2008, 16h01
  5. selection d'un item dans une ComboBox remplie via WCF
    Par Lazslo dans le forum Silverlight
    Réponses: 0
    Dernier message: 18/11/2008, 20h01

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