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+
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?