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