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

时间:2018-04-11 20:28:11

标签: python numpy vtk

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

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

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

编辑 - 我查看了this,但该解决方案似乎无法运作。

1 个答案:

答案 0 :(得分:1)

假设您的图像在NumPy数组中是nxny乘3的图像,则可以创建一个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)