2024-07-08 16:17:23 发布
网友
我有一个新格式的RGB图像,我想使用vtk进行纹理映射。我通常使用PNGReader加载纹理图像,如下所示-
PNGReader
png_reader = vtk.vtkPNGReader() png_reader.SetFileName(png_file) texture.SetInputConnection(png_reader.GetOutputPort())
我知道vtk提供了某种python集成,但我不确定如何实现。在
编辑——我看了this,但这个解决方案似乎不起作用。在
假设您的图像是一个NumPy数组中的nxby ny乘以3,那么您可以创建一个vtkImageData对象并将其传递给vtkTexture对象(这与您拥有的工作流相同,只是跳过读取器):
nx
ny
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变得更简单:
假设您的图像是一个NumPy数组中的
nx
byny
乘以3,那么您可以创建一个vtkImageData
对象并将其传递给vtkTexture
对象(这与您拥有的工作流相同,只是跳过读取器):注意:有一些方便的方法可以让PyVista变得更简单:
^{pr2}$相关问题 更多 >
编程相关推荐