numpy数据转为vtkImageData
numpy array是一个离散的三维空间数据场(离散体数据场),格式为三维数组,需把numpy数据转成vtk里可以用的格式:numpy array -> vtkIImageData。实现方法有两种:
方法一:numpy_to_vtk
首先介绍一下
vtk.util.numpy_support的用法
numpy_to_vtk(num_array, deep=0, array_type=None) # 将numpy数组转化为VTK数组,有三个参数 # 参数一:这里的num_array必须是1维或2维数组,因此一般需用ravel或flatten将3维数组平铺为1维数组。 # 参数二:deep一般设为1(True),采用deep——copy模式,避免内存问题。 # 参数三:array_type 数组数据类型 数据类型参考链接:C++数据类型和VTK里的数据类型_vtk.vtk_float数据类型-CSDN博客
下面是具体的数据转换代码,在这里我直接定义一个numpy_array2vtk_image(numpy_array)函数
对于3D array,可以用flatten
或者ravel
先转成1D array就可以使用了。这里的1D array得是C order(row-major order),最好使用deep copy(1)以免出现一些内存管理的问题。
import vtk.util.numpy_support def numpy_array2vtk_image(numpy_array): # vtkImageData中的数据全部都平铺成了一维数组,所以此处使用ravel()函数进行平铺处理 vtk_data = numpy_support.numpy_to_vtk(np_array.ravel(), deep=1, array_type=vtk.VTK_DOUBLE) image_data = vtk.vtkImageData() # 设置meta信息 image_data.SetDimensions(np_array.shape) #设置各维度尺寸 image_data.SetSpacing([1, 1, 1]) #设置像素间距pixel spacing image_data.SetOrigin([0, 0, 0]) #设置原点 # 设置数据信息 image_data.GetPointData().SetScalars(vtk_data) return image_data