-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
66 lines (57 loc) · 2.22 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @FileName : main.py
# @Time : 2022/3/19 13:21
# @Author : Liu
# @Software : PyCharm
import vtk
from PyQt5 import QtWidgets
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
from PointCloud_APP import Ui_MainWindow
import open3d as o3d
import numpy as np
from vtk.util.numpy_support import numpy_to_vtk
class Mywindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super(Mywindow, self).__init__()
self.setupUi(self)
self.setWindowTitle('PointCloud_APP')
# A button click event, the response function is: read_file_vis
self.pushButton.clicked.connect(self.read_file_vis)
self.frame = QtWidgets.QFrame()
self.vtkWidget = QVTKRenderWindowInteractor(self.frame)
self.formLayout.addWidget(self.vtkWidget)
self.ren = vtk.vtkRenderer()
self.vtkWidget.GetRenderWindow().AddRenderer(self.ren)
self.iren = self.vtkWidget.GetRenderWindow().GetInteractor()
self.show()
self.iren.Initialize()
def read_file_vis(self):
filepath, filetype = QtWidgets.QFileDialog.getOpenFileName(self, 'openfile', '../../PCD_File',
'pcd files (*.pcd *.ply)')
self.lineEdit.setText(filepath)
# Read point cloud file
pcd = o3d.io.read_point_cloud(filepath)
source_data = np.asarray(pcd.points)
points = vtk.vtkPoints()
# Convert numpy array to VTK data
points.SetData(numpy_to_vtk(source_data))
polydata = vtk.vtkPolyData()
polydata.SetPoints(points)
vertex = vtk.vtkVertexGlyphFilter()
vertex.SetInputData(polydata)
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(vertex.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
# Point cloud color normalization
actor.GetProperty().SetColor(1, 1, 1)
self.ren.SetBackground(0, 0, 0)
self.ren.AddActor(actor)
self.ren.ResetCamera()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window = Mywindow()
window.show()
sys.exit(app.exec_())