OpenCV destroyWindow()不做任何事情。

时间:2014-08-16 21:22:31

标签: c++ linux opencv ubuntu

我有一个窗口,我打开就像OpenCV教程显示的那样,但我希望能够关闭窗口并在我的程序中执行其他操作。图像显示正确,但是当调用destroyWindow时,它似乎什么都不做,只是移动到下一行代码。我也尝试过destroyAllWindow()以及相同的结果。我发现的与此相关的大部分问题都是针对C的,或者他们只是说使用destroyWindow(),但这对我不起作用。

#include <iostream>
#include <string>
#include "opencv2/core/core.hpp"
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>//FOR TESTING


void MyPause(std::string msg){
    if(msg != ""){
        std::cout << "[+] " << msg << std::endl;
    }
    std::cout << "Press enter to continue" << std::endl;
    std::cin.get();
}

void DisplayMat(cv::Mat img){
    cv::namedWindow( "Input", cv::WINDOW_AUTOSIZE );// Create a window for display.
    cv::imshow( "Input", img );
    cv::waitKey(0);
    cv::destroyWindow("Input");

    return;
}

std::string filename = "/home/nedwards/Code/projectFiles/testMedia/myYellow.jpg";


int main(){

    DisplayMat(som.inputImg);//just assume that som.input is a correctly opend Mat... it is!
    MyPause("END OF MAIN");
    return 0;
}

1 个答案:

答案 0 :(得分:-1)

可能的解决方案是:

cvStartWindowThread();

靠近代码的开头,(主要的开始)。这可以帮助调用cvDestroyWindow()时经常发生的慢速事件交换。您可以查看here了解更多详情。

然而,作为旁注,这不是完美的解决方案。它与我的一些代码配合得很好,但是当涉及到其他事件监听器如waitKey()时,我一直遇到问题,我想这是可以理解的。