C++ MRPT:可以从视口中获取图像吗?

C++ MRPT:可以从视口中获取图像吗?,c++,C++,我试着用一个移动的摄像机来模拟一个简单的场景。如果创建另一个视口,我可以操纵视口的摄影机并在场景中移动它 视口渲染场景中的所有对象后,如何提取CImage 提前谢谢 上传2 我正在使用windows并从getLastWindowImage获取灰色图像 我也尝试过屏幕外渲染方法,但它也会返回灰色图像。我的目标是模拟连接到机器人上的摄像头,并处理返回的图像以提取特征和检测对象 目前,我的场景中有一个DisplayWindow3d,现在只是尝试从默认视口中获取图像 mrpt::

我试着用一个移动的摄像机来模拟一个简单的场景。如果创建另一个视口,我可以操纵视口的摄影机并在场景中移动它

视口渲染场景中的所有对象后,如何提取CImage

提前谢谢

上传2

我正在使用windows并从getLastWindowImage获取灰色图像

我也尝试过屏幕外渲染方法,但它也会返回灰色图像。我的目标是模拟连接到机器人上的摄像头,并处理返回的图像以提取特征和检测对象

目前,我的场景中有一个DisplayWindow3d,现在只是尝试从默认视口中获取图像

            mrpt::opengl::COpenGLScenePtr &theScene = vis->get3DSceneAndLock();
            vis->unlockAccess3DScene();
            //Create a rendered
            mrpt::opengl::CFBORender render(800,600);
            //Create an image 
            mrpt::utils::CImage frame(800, 600, 3, false);
            render.getFrame2(*(theScene.pointer()), frame);
可以这样做:

mrpt::gui::CDisplayWindow3D  win;
//... fill your 3D scene

while (win.isOpen())
{
  // Start capturing:
  win.captureImagesStart();

  // Get screenshot:
  mrpt::utils::CImage img;
  bool capture_ok = win.getLastWindowImage(img);

  // Do whatever to img


  // Loop
  mrpt::system::sleep(1);
}

但是,请注意,某些Windows主题可能会导致图像捕获失败,从而产生灰色图像。。。谷歌在线搜索一些解决方案,或者使用可选的屏幕外渲染方法(请参阅)。

感谢您的快速回复,我尝试了这两种方法,但仍然无法使其正常工作。那么这一定是wxWidgets wxGLCanvas中的一个bug。。。如果你想解决这个问题,请打开一张针对wxWidgets bug tracker的罚单,向他们解释问题,并指出用于捕获图像的代码在第204行:干杯!谢谢你的快速回复,我会用wxWidgets打开一张票。然而,我想知道为什么循环流化床锅炉会遇到同样的问题。我是否正确设置了渲染场景?我是否正确地假设我可以在窗口中使用CfForender渲染相同的场景?我查看了CFBORender.cpp,它似乎不依赖wxWidgets,而只依赖opengl。这个错误现在在MRPT中得到了修复,不再使用wxWidgets抓取图像,而是直接访问opengl缓冲区像素。查看此提交:该修复程序将包含在下一个1.4.0稳定版本中,同时您可以使用git
master
分支的最新版本。