这是一个随机问题。当我重新制作我的项目时,这个问题更有可能发生。我用gdb核心转储分析,发现可能是cv::namedWindow函数的原因?
这是main.cpp
Simple_ORB_SLAM::Map map;
Simple_ORB_SLAM::LocalMapping localMapper(&map);
Simple_ORB_SLAM::VisualOdometry vo(&localMapper, &euroc, &map);
Simple_ORB_SLAM::Viewer viewer(&euroc, &map, &vo);
std::thread* tViewer = new std::thread(&Simple_ORB_SLAM::Viewer::Run, &viewer);
std::thread* tMapper = new std::thread(&Simple_ORB_SLAM::LocalMapping::Run, &localMapper); 这是Viwer::Run()函数。
glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//set menu
pangolin::CreatePanel("menu").SetBounds(0.0,1.0,0.0,pangolin::Attach::Pix(175));
pangolin::Var<bool> menuFollowCamera("menu.Follow Camera",true,true);
pangolin::Var<bool> menuShowPoints("menu.Show Points",true,true);
pangolin::Var<bool> menuShowKeyFrames("menu.Show KeyFrames",true,true);
//set camera
pangolin::OpenGlRenderState s_cam(pangolin::ProjectionMatrix(1024,768, mpCamera->mViewpointF,mpCamera->mViewpointF,512,389,0.1,1000),pangolin::ModelViewLookAt(mpCamera->mViewpointX,mpCamera->mViewpointY,mpCamera->mViewpointZ, 0,0,0,0.0,-1.0, 0.0) );
//set view
pangolin::View& d_cam = pangolin::CreateDisplay()
.SetBounds(0.0, 1.0, pangolin::Attach::Pix(175), 1.0, -1024.0f/768.0f)
.SetHandler(new pangolin::Handler3D(s_cam));
//set transform mat
pangolin::OpenGlMatrix Twc;
Twc.SetIdentity();
//set opencv window
cv::namedWindow("Simple_ORB_SLAM: Current Frame");
while(!pangolin::ShouldQuit())
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
d_cam.Activate(s_cam);
//set background
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
DrawCurrCamera();
if(menuShowPoints)
DrawMapPoints();
if(menuShowKeyFrames)
DrawKeyFrames();
pangolin::FinishFrame();
}并在类框架的构造函数中展示了图像
...
//show orb feature map
cv::imshow("Simple_ORB_SLAM: Current Frame",imgLeft);
cv::waitKey(250/mpCamera->fps);screenshot这是gdb回溯
这是我第一次使用gdb和stackoverflow,很抱歉对我的问题的模糊描述。我希望你能帮助我。
发布于 2020-05-19 16:42:22
您不应该从非主线程的线程中打开cv::namedWindow。这可能行得通,但我不建议你这么做。
https://stackoverflow.com/questions/61883059
复制相似问题