Search code examples
c++opencvvtkoculus

Rendering VTK visualization using OpenCV instead


Is it possible to get a rendered frame from a VTK visualization and pass it to OpenCV as an image without actually rendering a VTK window?

Looks like I should be able to follow this answer to get the rendered VTK frame from a window and then pass it to OpenCV code, but I don't want to render the VTK window. (I want to render a PLY mesh using VTK to control the camera pose, then output the rendered view to OpenCV so I can distort it for an Oculus Rift application).

Can I do this using the vtkRenderer class and not the vtkRenderWindow class?

Also, I'm hoping to do this all using the OpenCV VTK module if that is possible.

EDIT: I'm starting to think I should just be doing this with VTK functions alone since there is plenty of attention being paid to VTK and Oculus Rift paired together. I would still prefer to use OpenCV since that side of the code is complete and works nicely already.


Solution

  • You must make your render windows to render offline like this:

    renderWindow->SetOffScreenRendering( 1 );

    Then use a vtkWindowToImageFilter:

    vtkSmartPointer<vtkWindowToImageFilter> windowToImageFilter = 
       vtkSmartPointer<vtkWindowToImageFilter>::New();
    windowToImageFilter->SetInput(renderWindow);
    windowToImageFilter->Update();
    

    This is called Offscreen Rendering in VTK. Here is a complete example