python - vtkWindowToImageFilter 的速度太慢,如何加快速度?
问题描述
目前,我们需要在我的项目中使用 vtk。我们要获取离屏渲染图片并显示出来。我们使用 vtkWindowToImageFilter 来获取渲染图片。但是,我们发现它太慢了。我的代码是:
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys, os
import numpy as np
import vtk, qimage2ndarray
class vtkLabel(QLabel):
def __init__(self):
super(vtkLabel, self).__init__()
cone = vtk.vtkConeSource()
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(cone.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
ren = vtk.vtkRenderer()
ren.AddActor(actor)
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
renWin.SetOffScreenRendering(1)
imageFilter = vtk.vtkWindowToImageFilter()
imageFilter.SetInput(renWin)
self.ren = ren
self.renWin = renWin
self.imageFilter = imageFilter
def resizeEvent(self, QMouseEvent):
super(vtkLabel, self).resizeEvent(QMouseEvent)
print(self.width(), self.height())
self.renWin.SetSize(self.width(), self.height())
self.renWin.Render()
self.imageFilter.Modified()
self.imageFilter.Update()
displayImg = self.imageFilter.GetOutput()
dims = displayImg.GetDimensions()
from vtk.util.numpy_support import vtk_to_numpy
numImg = vtk_to_numpy(displayImg.GetPointData().GetScalars())
numImg = numImg.reshape(dims[1], dims[0], 3)
numImg = numImg.transpose(0, 1, 2)
numImg = np.flipud(numImg)
displayQImg = qimage2ndarray.array2qimage(numImg)
pixmap = QPixmap.fromImage(displayQImg)
self.pixmap = pixmap
def paintEvent(self, QPaintEvent):
super(vtkLabel, self).paintEvent(QPaintEvent)
painter = QPainter(self)
width = self.width()
height = self.height()
painter.drawPixmap(QPoint(0, 0), self.pixmap, QRect(0, 0, width, height))
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.resize(500,500)
self.imageLabel = vtkLabel()
self.setCentralWidget(self.imageLabel)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
在这段代码中,我们发现当我们改变窗口大小时速度很慢。奇怪的是,如果我删除/注释代码“renWin.SetOffScreenRendering(1)”,速度会很快。
如何加快此代码的速度?任何建议表示赞赏。
解决方案
推荐阅读
- python - python all() 函数是否遍历所有元素?
- java - Spring Boot 邮件发件人出错:com.sun.mail.smtp.SMTPSendFailedException
- python - 使用 .csv 标头(字符串日期)作为变量
- python - 熊猫散点图可以在没有交互性的情况下绘制图形
- ios - 仅在 Swift 4.2 中上传带有多部分表单数据的图像
- c++ - Qt Post 请求执行但失败
- javascript - 禁用复选框
- gitlab - GitLab 容器注册表:有什么方法可以自动删除旧容器?
- django-cms - Django CMS 占位符字段
- javascript - 如何使用 JS 使 HTML 内容随机变化