Pyqt получить положение и значение пикселя при щелчке мышью по изображению - PullRequest
4 голосов
/ 17 августа 2010

Я хотел бы знать, как я могу выбрать пиксель щелчком мыши на изображении (QImge) и получить позицию и значение пикселя.

Спасибо

Ответы [ 3 ]

6 голосов
/ 01 июня 2011
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() 
2 голосов
/ 12 марта 2018

Этот вопрос старый, но для всех, кто попадает сюда, как и я, это мое решение, основанное на ответе Джареда:

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

Убедитесь, что размер этикетки соответствует размеру изображения, в противном случаеКоординаты мыши x и y необходимо преобразовать в координаты изображения.И я думаю, также возможно использовать метод .pixel() непосредственно на растровом изображении, но объект QImage, кажется, работает лучше в моем случае.

2 голосов
/ 23 августа 2010

Сначала вы должны нарисовать изображение. Вы можете сделать это, сделав виджет QLabel и позвонив setPixmap. Вам нужно конвертировать QImage в QPixmap перед этим (вы можете использовать QPixmap.fromImage(img)).

Вы можете получить щелчки мыши, создав подкласс QImage и перехватив mousePressEvent. Посмотрите значение пикселя с помощью QImage.pixel().

...