在 numpy 中使用 3 通道图像作为 vtk 中的纹理图像



我有一个 numpy 格式的 RGB 图像,我想使用 vtk 进行纹理映射。我通常使用PNGReader加载纹理图像,如下所示 -

png_reader = vtk.vtkPNGReader()
png_reader.SetFileName(png_file) 
texture.SetInputConnection(png_reader.GetOutputPort())

我知道 vtk 提供了某种 python 集成,但我不确定该怎么做。

编辑 - 我看了这个,但那个解决方案似乎不起作用。

假设您的图像在 NumPy 数组中被 ny x 3 nx,您可以创建一个 vtkImageData 对象并将其传递给 vtkTexture 对象(这将是您拥有的相同工作流程,只是跳过读取器(:

import vtk
from vtk.util.numpy_support import numpy_to_vtk
import numpy as np
# Assuming you have a 3D NumPy array as `image`:
image = np.random.randn(2048, 1024, 3)
grid = vtk.vtkImageData()
grid.SetDimensions(image.shape[1], image.shape[0], 1)
vtkarr = numpy_to_vtk(np.flip(image.swapaxes(0,1), axis=1).reshape((-1, 3), order='F'))
vtkarr.SetName('Image')
grid.GetPointData().AddArray(vtkarr)
grid.GetPointData().SetActiveScalars('Image')
vtex = vtk.vtkTexture()
vtex.SetInputDataObject(grid)
vtex.Update()

注意:PyVista 有一些方便的方法可以简化此操作:

import pyvista
texture = pyvista.numpy_to_texture(image)

最新更新