@Odin08

PyQtGraph. Повысить фпс при отображении изображения 4.2 МPixels?

Здравствуйте!
Написал приложение для отображения видео с научной камеры 4.2 МPixels. Однако фпс для такого разрешения порядка 6. Примеры SpeedTest_Video для pyqtgraph при больших значениях дают тот же результат. Есть у кого соображения как ускорить все это дело (в работе важна тонкая настройка)? В программировании новичок.
Для тестирования приложения изображение заменено функцией intensity, скорость создания массива grab_image() в данном коде совпадает со скоростью получения изображении с камеры с минимальной экспозицией. Цветовая карта необходима. Приложения располагает кнопками и другим, но для тестирования я их не отрисовываю.

import sys

import matplotlib.pyplot as plt
import numpy as np

from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph as pg
from PyQt5.QtWidgets import QMainWindow
from MineGUI import Ui_Dialog
from pyqtgraph.ptime import time


class MainWindow(QMainWindow, Ui_Dialog):
    def __init__(self, parent=None, *args, **kwargs):
        QMainWindow.__init__(self)
        self.setupUi(self)

def main():
    # Init main window window
    app = QtGui.QApplication([])
    main = MainWindow()
    main.show()
    # Add ViewBox for Image
    view = pg.ViewBox()
    main.imshow.setCentralItem(view) # (main.imshow = pg.GraphicsView(Dialog) from MineGUI)
    # Add Image Item and set colormap
    img = pg.ImageItem()
    cmap = pg.ColorMap(bit, colmap)
    lut = cmap.getLookupTable(0.0, 1.0, 255)
    img.setLookupTable(lut)
    img.setAutoDownsample(True)
    img.setBorder('b')
    
    view.addItem(img)


    timer = QtCore.QTimer()

    def setText(qo):
        main.exposValue.setText(str(qo)) #(main.exposValue = QtWidgets.QLabel(Dialog) from MineGUI)

    def grab_image():
        wx = 720 + np.random.rand(1) * 20
        wy = 650 + np.random.rand(1) * 30
        return intensity(x, wx, wy)

    def intensity(x, wx, wy):
        zx = np.exp(-2 * (x[None, :] - 1000) ** 2 / wx ** 2)
        zy = np.exp(-2 * (x[:, None] - 1000) ** 2 / wy ** 2)
        return (zx * zy)

    global lastTime, fps
    lastTime = time()
    fps = None
    x = np.arange(0, 2048, 1)

    def update():
        global lastTime, fps, data

        data = grab_image()
        img.setImage(data)

        now = time()
        dt = now - lastTime
        lastTime = now

        if fps is None:
            fps = 1.0 / dt
        else:
            s = np.clip(dt * 3., 0, 1)
            fps = fps * (1 - s) + (1.0 / dt) * s
        setText('%0.2f fps' % fps)
        start = time()
        app.processEvents()
        print(time() - start)

    timer.timeout.connect(update)
    timer.start(0)

    if __name__ == '__main__':
        import sys

        if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
            QtGui.QApplication.instance().exec_()

bit = np.arange(0, 257, 1)/256
colmap = np.array(255 * plt.cm.nipy_spectral(bit), dtype=np.ubyte)
main()
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы