pyqt5+pyqtgraph+播放视频

坑,未填

 

1. 提升类

 

2. 看到如下的效果

 

然后用一个timer,循环播放视频

from GUI.NakedSomaToolMainWindow import *
from PyQt5.QtWidgets import *
import pyqtgraph as pg
import pyqtgraph.ptime as ptime

from PyQt5.QtCore import *

from pyqtgraph import GraphicsView

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()#调用父类的构造函数
        self.setupUi(self)

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


app = QApplication(sys.argv)
ui = MainWindow()
ui.show()

# 播放视频,从mk data到播放
vb = pg.ViewBox()
ui.graphicsView_2.setCentralItem(vb)
vb.setAspectLocked()
img2 = pg.ImageItem()
vb.addItem(img2)
vb.setRange(QtCore.QRectF(0, 0, 512, 512))


cache = {}
ptr = 0

def mkData():
    with pg.BusyCursor():
        global data, cache, ui
        # frames = ui.framesSpin.value()
        # width = ui.widthSpin.value()
        # height = ui.heightSpin.value()
        # dtype = (ui.dtypeCombo.currentText(), ui.rgbCheck.isChecked(), frames, width, height)
        frames = 10
        width = 512
        height = 512
        dtype = ('uint8', False, 10, 512, 512)
        if dtype not in cache:
            if dtype[0] == 'uint8':
                dt = np.uint8
                loc = 128
                scale = 64
                mx = 255
            elif dtype[0] == 'uint16':
                dt = np.uint16
                loc = 4096
                scale = 1024
                mx = 2 ** 16
            elif dtype[0] == 'float':
                dt = np.float
                loc = 1.0
                scale = 0.1

            data = np.random.normal(size=(frames, width, height), loc=loc, scale=scale)
            data = pg.gaussianFilter(data, (0, 6, 6))
            if dtype[0] != 'float':
                data = np.clip(data, 0, mx)

            data = data.astype(dt)
            data[:, 10, 10:50] = mx
            data[:, 9:12, 48] = mx
            data[:, 8:13, 47] = mx
            cache = {dtype: data}  # clear to save memory (but keep one to prevent unnecessary regeneration)

        data = cache[dtype]
        # updateLUT()
        # updateSize()
mkData()
def update():
    global ui,ptr,img2
    img2.setImage(data[ptr % data.shape[0]], autoLevels=False,levels=None,lut=None,autoDownsample=False)
    ptr += 1
    # app.processEvents()  ## force complete redraw for every plot


# 下边这个地方是生成一个随机图片
img11 = pg.gaussianFilter(np.random.normal(size=(200, 200)), (5, 5)) * 20 + 100
img11 = img11[np.newaxis, :, :]
decay = np.exp(-np.linspace(0, 0.3, 100))[:, np.newaxis, np.newaxis]
data11 = np.random.normal(size=(100, 200, 200))
data11 += img11 * decay
data11 += 2
## Add time-varying signal
sig = np.zeros(data11.shape[0])
sig[30:] += np.exp(-np.linspace(1, 10, 70))
sig[40:] += np.exp(-np.linspace(1, 10, 60))
sig[70:] += np.exp(-np.linspace(1, 10, 30))
sig = sig[:, np.newaxis, np.newaxis] * 3
data11[:, 50:60, 30:40] += sig
ui.graphicsView.setImage(data11, xvals=np.linspace(1., 3., data.shape[0]))


timer = QtCore.QTimer()
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_()

搞出来的效果是:

一直在播放视频,帧率能达到300~~400+

posted @ 2020-05-26 11:48  bH1pJ  阅读(129)  评论(0编辑  收藏  举报