In VTK I am able to use the following snippet to save the render window as an image. However, actually I want to get it directly as a numpy array (without writing then reading).
im = vtkWindowToImageFilter()
writer = vtkPNGWriter()
im.SetInput(renderWindow)
im.Update()
writer.SetInputConnection(im.GetOutputPort())
writer.SetFileName("file.png")
writer.Write()
What is the best way to do this?
I believe there is no need to involve vtkXWriter
(where X
is some format), except if you need the data in the X
format. After you define the window from which you want to export its contents as an image, you can proceed to get a VTK image and work with that.
from vtk.util.numpy_support import vtk_to_numpy
...
vtk_rw = vtk.vtkRenderWindow()
...
vtk_win_im = vtk.vtkWindowToImageFilter()
vtk_win_im.SetInput(vtk_rw)
vtk_win_im.Update()
vtk_image = vtk_win_im.GetOutput()
width, height, _ = vtk_image.GetDimensions()
vtk_array = vtk_image.GetPointData().GetScalars()
components = vtk_array.GetNumberOfComponents()
arr = vtk_to_numpy(vtk_array).reshape(height, width, components)
...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With