VTK Python 代码整理
读取点云 txt 数据并显示
txt 点云数据
准备了 bun000.txt 和 bun180.txt,数据文件是从斯坦福3D扫描模型网站上 ply 文件中分离出的,两个 txt 文档分别是前后相差 180 度扫描出的点云数据,文档已上传至 GitHub,下载可以点这里。
代码
准备好 txt 格式的点云数据文件,接下来导入 vtk、numpy 等模块,便可通过如下代码展示 bun000.txt 中的点云模型:
import numpy
import vtk
from vtk.util.numpy_support import numpy_to_vtk
if __name__ == '__main__':
# 读取 txt 文档
source_data = numpy.loadtxt("bun000.txt")
# 新建 vtkPoints 实例
points = vtk.vtkPoints()
# 导入点数据
points.SetData(numpy_to_vtk(source_data))
# 新建 vtkPolyData 实例
polydata = vtk.vtkPolyData()
# 设置点坐标
polydata.SetPoints(points)
# 顶点相关的 filter
vertex = vtk.vtkVertexGlyphFilter()
vertex.SetInputData(polydata)
# mapper 实例
mapper = vtk.vtkPolyDataMapper()
# 关联 filter 输出
mapper.SetInputConnection(vertex.GetOutputPort())
# actor 实例
actor = vtk.vtkActor()
# 关联 mapper
actor.SetMapper(mapper)
# render
render = vtk.vtkRenderer()
render.SetBackground(0, 0, 0)
# Renderer Window
window = vtk.vtkRenderWindow()
window.AddRenderer(render)
window.SetSize(1200, 1200)
# System Event
win_render = vtk.vtkRenderWindowInteractor()
win_render.SetRenderWindow(window)
# Style
win_render.SetInteractorStyle(vtk.vtkInteractorStyleMultiTouchCamera())
# Insert Actor
render.AddActor(actor)
win_render.Initialize()
win_render.Start()
效果图
可以看到点云只有正面扫描到的部分。
代码2
同理,我们读取 bunny180.txt 中的点云数据,以红色点显示:
import numpy
import vtk
from vtk.util.numpy_support import numpy_to_vtk
if __name__ == '__main__':
# 读取 txt 文档
source_data = numpy.loadtxt("bun180.txt")
# 新建 vtkPoints 实例
points = vtk.vtkPoints()
# 导入点数据
points.SetData(numpy_to_vtk(source_data))
# 新建 vtkPolyData 实例
polydata = vtk.vtkPolyData()
# 设置点坐标
polydata.SetPoints(points)
# 顶点相关的 filter
vertex = vtk.vtkVertexGlyphFilter()
vertex.SetInputData(polydata)
# mapper 实例
mapper = vtk.vtkPolyDataMapper()
# 关联 filter 输出
mapper.SetInputConnection(vertex.GetOutputPort())
# actor 实例
actor = vtk.vtkActor()
<