Pyqt obtenir la position de pixel et de la valeur quand clic de souris sur l'image

voix
3

Je voudrais savoir comment je peux sélectionner un pixel avec un clic de souris dans une image (QImge) et obtenir la position de pixel et la valeur.

Merci

Créé 17/08/2010 à 17:05
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
5
self.image = QLabel()
self.image.setPixmap(QPixmap("C:\\myImg.jpg"))
self.image.setObjectName("image")
self.image.mousePressEvent = self.getPos

def getPos(self , event):
    x = event.pos().x()
    y = event.pos().y() 
Créé 01/06/2011 à 10:54
source utilisateur

voix
1

D' abord , vous devez dessiner l'image. Vous pouvez le faire que je fasse un QLabelwidget et appel setPixmap. Vous devez convertir votre QImageà QPixmapavant de le faire (vous pouvez utiliser QPixmap.fromImage(img)).

Vous pouvez obtenir des clics de souris par le sous - classement QImageet l' interception mousePressEvent. Recherchez la valeur de pixel avec QImage.pixel().

Créé 22/08/2010 à 22:28
source utilisateur

voix
0

Cette question est vieux, mais pour tout le monde d'arriver ici, comme moi, c'est ma solution basée sur la réponse Jareds:

self.img = QImage('fname.png')
pixmap = QPixmap(QPixmap.fromImage(self.img))
img_label = QLabel()
img_label.setPixmap(pixmap)
img_label.mousePressEvent = self.getPixel

def self.getPixel(self, event):
    x = event.pos().x()
    y = event.pos().y()
    c = self.img.pixel(x,y)  # color code (integer): 3235912
    # depending on what kind of value you like (arbitary examples)
    c_qobj = QColor(c)  # color object
    c_rgb = QColor(c).getRgb()  # 8bit RGBA: (255, 23, 0, 255)
    c_rgbf = QColor(c).getRgbf()  # RGBA float: (1.0, 0.3123, 0.0, 1.0)
    return x, y, c_rgb

Assurez - vous que la taille de l'étiquette correspond à la taille de l'image, sinon les x et y coords souris doivent être transformées en coords d'image. Et je pense qu'il est également possible d'utiliser la .pixel()méthode directement sur un pixmap aussi bien, mais l'objet QImage semble mieux performer dans mon cas.

Créé 12/03/2018 à 13:04
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more