pyqtgraph ImageView и цветные изображения - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь отобразить массивный массив RGB в ImageView () (или аналогичном) в Dock в pyqtgraph.

Общая идея выглядит примерно так:

import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import numpy as np

from pyqtgraph.dockarea import Dock, DockArea

class SimDock(Dock):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        #self.im1 = pg.image()
        self.im1 = pg.ImageView()

        self.im1.setImage(np.random.normal(size=(100, 100, 3)))
        self.addWidget(self.im1, row=0, col=0)

        self.im1.ui.histogram.hide()
        self.im1.ui.menuBtn.hide()
        self.im1.ui.roiBtn.hide()


app = QtGui.QApplication([])
win = QtGui.QMainWindow()
area = DockArea()
win.setCentralWidget(area)
win.resize(1500, 800)
win.setWindowTitle('pyqtgraph example: dockarea')

simdock = SimDock("Similar Images", size=(500, 500))
area.addDock(simdock, 'right')

win.show()

# Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        app.instance().exec_()

Однако, когда я запускаю вышеописанное, я получаю:

ValueError: could not broadcast input array from shape (100,100,3) into shape (100,100)

Когда я переключаю self.im1 на pg.image вместо pg.ImageView, тогда в доке появляется изображение RGB, но я получаювторое пустое окно (которое, я полагаю, происходит от pg.image()).

Исходя из этого вопроса , ImageView может принимать (M, N, 3) RGB-данные, но я могу 'Похоже, он не отображает RGB-изображение в виджете без появления второго окна.

1 Ответ

0 голосов
/ 15 июня 2018

Ну, я нашел один способ сделать это, который кажется разумным. Существует сообщение , в котором предлагается подкласс pg.ImageView для автоматического добавления таблицы соответствия для цвета.Итак, в итоге у меня есть:

class ColorImageView(pg.ImageView):
    """
    Wrapper around the ImageView to create a color lookup
    table automatically as there seem to be issues with displaying
    color images through pg.ImageView.
    """

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.lut = None

    def updateImage(self, autoHistogramRange=True):
        super().updateImage(autoHistogramRange)
        self.getImageItem().setLookupTable(self.lut)

, тогда вызов в моем коде становится self.im1 = ColorImageView().

. Это работает для меня и кажется достаточно простым.

...