C++ OpenCV destroyWindow()不执行任何操作。

C++ OpenCV destroyWindow()不执行任何操作。,c++,linux,opencv,ubuntu,C++,Linux,Opencv,Ubuntu,我有一个像OpenCV教程一样打开的窗口,但我希望能够关闭该窗口并在程序中执行其他操作。图像显示正确,但当调用destroyWindow时,它似乎什么也不做,只是移动到下一行代码。我也尝试过destroyAllWindow(),结果也是一样的。我发现的大多数与此相关的问题都是针对C的,或者他们只是说使用destroyWindow(),但这对我不起作用 #include <iostream> #include <string> #include "opencv2/core/

我有一个像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;
}
#包括
#包括
#包括“opencv2/core/core.hpp”
#包括
#包括//用于测试
void MyPause(std::string msg){
如果(msg!=“”){

std::cout一个可能的解决方案是:

cvStartWindowThread();
靠近代码的开头(main的开头)。这有助于处理调用cvDestroyWindow()时发生的通常较慢的事件交换。您可以查看更多详细信息


不过,作为补充说明,这并不是完美的解决方案。它在我的一些代码中工作得很好,但目前我在涉及其他事件侦听器(如waitKey()时遇到了问题,我想这是可以理解的。

cv::waitKey(0);无限期地等待某个键,所以在您按下某个键后窗口应该关闭,如果您想显示窗口几秒钟,然后关闭它,请尝试cv::waitKey(2000);(2sec)。尝试此操作,窗口仍不想关闭?我不希望窗口弹出x秒然后关闭。我希望用户在选定窗口的情况下按一个键,然后窗口关闭。似乎许多人在销毁创建的窗口时遇到问题,很少有人想出解决问题的方法。这并不能真正回答问题注意。如果您有不同的问题,您可以通过单击来提问。您也可以在有足够的问题时吸引更多的注意力。您好,我应该把它作为一个回答说得更清楚,它不是一个问题。我不是那么新:)