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

2024-07-08 16:17:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我知道vtk提供了某种python集成,但我不确定如何实现。在

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


Tags: 图像编辑png格式rgbreaderfilevtk
1条回答
网友
1楼 · 发布于 2024-07-08 16:17:23

假设您的图像是一个NumPy数组中的nxby ny乘以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变得更简单:

^{pr2}$

相关问题 更多 >

    热门问题