vtk学习笔记

1. numpy转vtkImageData

from vtk.util import numpy_support

import numpy as np
import vtk

def np_array2vtk_image(np_array):
	# vtkImageData中的数据全部都平铺成了一维数组,所以此处使用ravel()函数进行平铺处理
	depth_arr = numpy_support.numpy_to_vtk(np_array.ravel(), deep=True, array_type=vtk.VTK_DOUBLE)
	im_data = vtk.vtkImageData()
	
	# 设置meta信息
	im_data.SetDimensions(np_array.shape)
	im_data.SetSpacing([1, 1, 1])
	im_data.SetOrigin([0, 0, 0])
	# 设置数据信息
	im_data.GetPointData().SetScalars(depth_arr)

	return im_data 

data = np.array([[[0, 0, 0], [0, 1, 0], [0, 0, 0]],
                 [[0, 1, 0], [1, 1, 1], [0, 1, 0]],
                 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]])
np_array2vtk_image(data)

2. vtkImageData转numpy

from vtk.util import numpy_support

import numpy as np
import vtk

def vtk_image2np_arrar(vtk_image):
	#获取数据,数据被平铺成一维
	sc = vtk_image.GetPointData().GetScalars()
	arr = vtk_to_numpy(sc)

	# 还原数据
	arr = arr.reshape(vtk_image.GetDimensions())
	return arr 

3. 渲染vtk_image

from vtk.util import numpy_support

import vtk
import SimpleITK as sitk
import numpy as np


def render_image(vtk_image_data):
    renderer = vtk.vtkRenderer()

    ren_win = vtk.vtkRenderWindow()

    ren_win.AddRenderer(renderer)

    iren = vtk.vtkRenderWindowInteractor()

    iren.SetRenderWindow(ren_win)

    reader = vtk.vtkStructuredPointsReader()
    reader.SetFileName("a.vti")

    opac_trans_func = vtk.vtkPiecewiseFunction()
    opac_trans_func.AddPoint(0, 0.0)
    opac_trans_func.AddPoint(1, 1.0)

    color_trans_func = vtk.vtkColorTransferFunction()

    color_trans_func.AddRGBPoint(0, 0.0, 0.0, 0.0)
    color_trans_func.AddRGBPoint(1, 1.0, 1.0, 1.0)

    vol_prop = vtk.vtkVolumeProperty()
    vol_prop.SetColor(color_trans_func)
    vol_prop.SetScalarOpacity(opac_trans_func)
    vol_prop.ShadeOn()

    vol_prop.SetInterpolationTypeToLinear()

    mapper = vtk.vtkSmartVolumeMapper()
    mapper.SetBlendModeToComposite()
    mapper.SetInputData(vtk_image_data)
    # mapper.SetInputConnection(reader.GetOutputPort())

    vol = vtk.vtkVolume()
    vol.SetMapper(mapper)
    vol.SetProperty(vol_prop)

    renderer.AddVolume(vol)
    renderer.SetBackground(1, 1, 1)
    ren_win.SetSize(512, 512)

    ren_win.Render()
    iren.Start()

4. 渲染vtkPolyData

def render_poly(poly_data):
    mapper = vtk.vtkPolyDataMapper()
    mapper.SetInputData(poly_data)

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

    renderer = vtk.vtkRenderer()
    renderer.AddActor(actor)

    render_window = vtk.vtkRenderWindow()
    render_window.AddRenderer(renderer)

    render_interactor = vtk.vtkRenderWindowInteractor()
    render_interactor.SetRenderWindow(render_window)

    render_interactor.Initialize()
    render_window.Render()
    render_interactor.Start()
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值