Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 改为使用OpenCV渲染VTK可视化_C++_Opencv_Vtk_Oculus - Fatal编程技术网

C++ 改为使用OpenCV渲染VTK可视化

C++ 改为使用OpenCV渲染VTK可视化,c++,opencv,vtk,oculus,C++,Opencv,Vtk,Oculus,是否可以从VTK可视化中获取渲染帧并将其作为图像传递给OpenCV,而不实际渲染VTK窗口 看起来我应该能够从窗口获取渲染的VTK帧,然后将其传递给OpenCV代码,但我不想渲染VTK窗口。(我想使用VTK渲染层网格以控制摄影机姿势,然后将渲染视图输出到OpenCV,以便对Oculus Rift应用程序进行扭曲) 我可以使用类而不是类来执行此操作吗 另外,如果可能的话,我希望使用OpenCV VTK模块来完成这一切 编辑:我开始认为我应该单独使用VTK函数来完成这项工作,因为VTK和Oculus

是否可以从VTK可视化中获取渲染帧并将其作为图像传递给OpenCV,而不实际渲染VTK窗口

看起来我应该能够从窗口获取渲染的VTK帧,然后将其传递给OpenCV代码,但我不想渲染VTK窗口。(我想使用VTK渲染层网格以控制摄影机姿势,然后将渲染视图输出到OpenCV,以便对Oculus Rift应用程序进行扭曲)

我可以使用类而不是类来执行此操作吗

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


编辑:我开始认为我应该单独使用VTK函数来完成这项工作,因为VTK和Oculus Rift组合在一起受到了广泛关注。我仍然希望使用OpenCV,因为代码的这一部分已经完成,并且已经很好地工作了。

您必须使渲染窗口脱机渲染,如下所示:

renderWindow->SetOffScreenRendering(1)

然后使用
vtkWindowToImageFilter

vtkSmartPointer<vtkWindowToImageFilter> windowToImageFilter = 
   vtkSmartPointer<vtkWindowToImageFilter>::New();
windowToImageFilter->SetInput(renderWindow);
windowToImageFilter->Update();
vtkSmartPointer windowToImageFilter=
vtkSmartPointer::New();
windowToImageFilter->SetInput(渲染窗口);
windowToImageFilter->Update();

这在VTK中称为屏幕外渲染

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

unsigned char* Ptr = static_cast<unsigned char*>(windowToImageFilter->GetOutput()->GetScalarPointer(0, 0, 0));

cv::Mat RGBImage(dims[1], dims[0], CV_8UC3, Ptr);
unsigned char*Ptr=static_cast(windowToImageFilter->GetOutput()->GetScalarPointer(0,0,0));
cv::材料RGBImage(尺寸[1],尺寸[0],cv_8UC3,Ptr);

我不确定是否可以跳过RenderWindow,因为它提供了图像的大小。VTK本身进行渲染时需要使用
vtkRenderWindow
。“vtkRenderWindow”创建了一个OpenGl上下文来进行绘图。非常感谢,我还没有尝试过,但这正是我所需要的。我想,要将它链接到OpenCV,我需要抓取
windowToImageFilter->GetOutput()
,它的类型是
vtkImageData
,然后使用类似
cv::Mat openCVImage(dims[0],dims[1],CV_8UC4,image->GetScalarPointer())
。有什么评论吗?我不知道OpenCV,但是访问数据的VTK部分是正确的方法。对不起,Brian,我真的没有太多使用OpenCV。所以那里没有cmments(