使用 OpenCV 渲染 VTK 可视化

Rendering VTK visualization using OpenCV instead

是否可以从 VTK 可视化中获取渲染帧并将其作为图像传递给 OpenCV 而无需实际渲染 VTK window?

看起来我应该能够按照 this answerwindow 获取渲染的 VTK 帧,然后将其传递给 OpenCV 代码,但是我不想渲染 VTK window。 (我想使用 VTK 渲染 PLY 网格来控制相机姿势,然后将渲染视图输出到 OpenCV,这样我就可以为 Oculus Rift 应用程序扭曲它)。

我可以使用 vtkRenderer class and not the vtkRenderWindow class 来做到这一点吗?

此外,如果可能的话,我希望使用 OpenCV VTK 模块来完成这一切。

编辑:我开始认为我应该只使用 VTK 函数来做这件事,因为有很多人关注 VTK 和 Oculus Rift 的配对。我仍然更喜欢使用 OpenCV,因为那部分代码已经完成并且已经可以很好地工作了。

您必须使渲染 windows 像这样离线渲染:

renderWindow->SetOffScreenRendering( 1 );

然后使用vtkWindowToImageFilter

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

这在 VTK 中称为 Offscreen RenderingHere is a complete example

您可以按照 El Marce 所述在屏幕外渲染图像,然后使用

将图像转换为 OpenCV cv::Mat
unsigned char* Ptr = static_cast<unsigned char*>(windowToImageFilter->GetOutput()->GetScalarPointer(0, 0, 0));

cv::Mat RGBImage(dims[1], dims[0], CV_8UC3, Ptr);