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

标签 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;
}

最佳答案

一个可能的解决方案是放置:

cvStartWindowThread();

靠近代码的开头(main 的开头)。这可以帮助解决调用 cvDestroyWindow() 时经常发生的缓慢事件交换。您可以看看here更多细节。

顺便说一句,但这并不是完美的解决方案。它与我的一些代码配合得很好,但目前当涉及 waitKey() 等其他事件监听器时,我遇到了问题,我想这是可以理解的。

关于c++ - OpenCV destroyWindow() 不执行任何操作。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25344108/

相关文章:

c++ - 如何在 C++ 中使用 setiosflags 将十进制数打印为八进制数

c++ - 将 Bitmap 转换为 unsigned char vector

python - cv2.VideoCapture卡住了我的整个计算机

javascript - 脚本:在HTML文件中显示图像

c++ - 获取链接错误 : Extern in C++. 如何访问在文件 A.CPP 中修改的变量的值在另一个文件文件 B.CPP 中

linux - yum list installed|grep <rpm name> 未以 jboss 用户身份执行

linux - 从汇编文件中读取

linux - 如何为 Linux shell 脚本编写 DB2 函数

opencv - 使用BRISK检测器/描述符OpenCV的性能问题

python-3.x - 如何在opencv python中显示没有标题栏和边框的图像