python vtk 读取三维raw数据存为stl

1、安装vtk;

2、读取三维raw、显示、保存为stl;

import vtk

# Read 3D RAW image
reader=vtk.vtkImageReader()
# reader.SetDataScalarType(vtk.VTK_UNSIGNED_SHORT)  # unsigned int16
reader.SetDataScalarType(vtk.VTK_UNSIGNED_CHAR)  # unsigned int8
reader.SetFileName('test.raw')
reader.SetNumberOfScalarComponents(1)
reader.SetFileDimensionality(3)
reader.SetDataByteOrderToLittleEndian()
reader.SetDataExtent(0,487,0,487,0,331)  #  image size 488*488*332
reader.SetDataSpacing(0.25, 0.25, 0.25)  # Volume Pixel
reader.Update()

# Visualization
contour=vtk.vtkMarchingCubes()  # vtk.vtkContourFilter()
contour.SetInputConnection(reader.GetOutputPort())
contour.ComputeNormalsOn()
contour.SetValue(0,1)

mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(contour.GetOutputPort())
mapper.ScalarVisibilityOff()

actor = vtk.vtkActor()
actor.SetMapper(mapper)

renderer=vtk.vtkRenderer()
renderer.SetBackground([0.5, 0.5, 0.5])
renderer.AddActor(actor)

window = vtk.vtkRenderWindow()
window.SetSize(640, 640)
window.AddRenderer(renderer)

# Create interactor, add window & add observers
interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(window)

# Start renderer & interactor
window.Render()
interactor.Initialize()
interactor.Start()

# Write in STL
triangle = vtk.vtkTriangleFilter()
triangle.SetInputConnection(contour.GetOutputPort())
triangle.PassVertsOff()
triangle.PassLinesOff()

decimation=vtk.vtkQuadricDecimation()
decimation.SetInputConnection(triangle.GetOutputPort())

clean=vtk.vtkCleanPolyData()
clean.SetInputConnection(triangle.GetOutputPort())

triangle2 = vtk.vtkTriangleFilter()
triangle2.SetInputConnection(clean.GetOutputPort())
triangle2.PassVertsOff()
triangle2.PassLinesOff()

stlWriter = vtk.vtkSTLWriter()
stlWriter.SetInputConnection(triangle2.GetOutputPort())
stlWriter.SetFileName("Test.stl")
stlWriter.Write()

3、显示生成的stl数据;

## Read and show STL
# Read and display for verification
reader = vtk.vtkSTLReader()
reader.SetFileName("Test.stl")
 
mapper = vtk.vtkPolyDataMapper()
if vtk.VTK_MAJOR_VERSION <= 5:
    mapper.SetInput(reader.GetOutput())
else:
    mapper.SetInputConnection(reader.GetOutputPort())
 
actor = vtk.vtkActor()
actor.SetMapper(mapper)
 
# Create a rendering window and renderer
ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
 
# Create a renderwindowinteractor
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
 
# Assign actor to the renderer
ren.AddActor(actor)
 
# Enable user interface interactor
iren.Initialize()
renWin.Render()
iren.Start()

 

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值