PyQt Python VTK PCL Qt pyqt5Gui 三维重建,可视化;
使用Python 可视化 GUI,需要用到 Qt; 这里是一个简单的例子,读取点云数据,显示;
基于 VTK9, pyqt5 ,python3.9 ,pypcl0.11
# This is a sample Python script.
# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
import vtk
from PyQt5 import QtCore, QtGui, QtWidgets
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
from testvtkgui import Ui_MainWindow
import pcl.pcl_visualization
class Mywindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super(Mywindow, self).__init__()
self.setupUi(self)
self.setWindowTitle('test_gui')
#visual = pcl.pcl_visualization.CloudViewing()
self.frame = QtWidgets.QFrame()
self.vtkWidget = QVTKRenderWindowInteractor(self.frame)
self.formLayout.addWidget(self.vtkWidget)
#self.vtkWidget.SetRenderWindow(visual.RenderWindow())
self.ren = vtk.vtkRenderer()
self.vtkWidget.GetRenderWindow().AddRenderer(self.ren)
self.iren = self.vtkWidget.GetRenderWindow().GetInteractor()
# Create source
fileName = "D:\\rabbit.pcd"; # 注意更换自己的pcd点云文件
cloud = pcl.load('D:/2cloud.pcd')
poins = vtk.vtkPoints()
for i in range(cloud.size):
dp = cloud[i]
poins.InsertNextPoint(dp[0], dp[1], dp[2])
polydata = vtk.vtkPolyData()
polydata.SetPoints(poins)
glyphFilter = vtk.vtkVertexGlyphFilter()
glyphFilter.SetInputData(polydata)
glyphFilter.Update()
dataMapper = vtk.vtkPolyDataMapper()
dataMapper.SetInputConnection(glyphFilter.GetOutputPort())
# Create an actor
actor = vtk.vtkActor()
actor.SetMapper(dataMapper)
actor1 = vtk.vtkActor()
actor1.SetMapper(dataMapper)
self.ren.AddActor(actor)
self.ren.AddActor(actor1)
self.ren.ResetCamera()
#self.frame.setLayout(self.formLayout)
#self.setCentralWidget(self.frame)
self.show()
self.iren.Initialize()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = Mywindow()
window.show()
sys.exit(app.exec_())