首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cv::namedWindow()崩溃,分段错误

cv::namedWindow()崩溃,分段错误
EN

Stack Overflow用户
提问于 2020-05-19 12:05:36
回答 1查看 192关注 0票数 0

这是一个随机问题。当我重新制作我的项目时,这个问题更有可能发生。我用gdb核心转储分析,发现可能是cv::namedWindow函数的原因?

这是main.cpp

代码语言:javascript
复制
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()函数。

代码语言:javascript
复制
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();    
}

并在类框架的构造函数中展示了图像

代码语言:javascript
复制
...

//show orb feature map
cv::imshow("Simple_ORB_SLAM: Current Frame",imgLeft);
cv::waitKey(250/mpCamera->fps);

screenshot这是gdb回溯

这是我第一次使用gdb和stackoverflow,很抱歉对我的问题的模糊描述。我希望你能帮助我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-19 16:42:22

您不应该从非主线程的线程中打开cv::namedWindow。这可能行得通,但我不建议你这么做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61883059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档