OpenCV destroyWindow() 不做任何事情。

Posted

技术标签:

【中文标题】OpenCV destroyWindow() 不做任何事情。【英文标题】:OpenCV destroyWindow() does not do anything. 【发布时间】:2014-08-16 21:22:30 【问题描述】:

我有一个像 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;

【问题讨论】:

cv::waitKey(0);无限等待某个键,因此在您按下某个键后窗口应该关闭,如果您想显示窗口几秒钟然后关闭它,请尝试 cv::waitKey(2000); (2 秒)。试试这个,窗口还是不想关闭? 我不希望窗口弹出 x 秒然后关闭。我希望这个人在选择窗口的情况下按下一个键,然后窗口关闭。似乎很多人都遇到过销毁创建的窗口的问题,但很少有人想出解决问题的办法。 【参考方案1】:

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

cvStartWindowThread();

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

附带说明,但这并不是完美的解决方案。它在我的一些代码中运行良好,但目前当涉及其他事件侦听器(如 waitKey())时我遇到了问题,我想这是可以理解的。

【讨论】:

这并不能真正回答问题。如果您有其他问题,可以点击 提问。一旦你有足够的reputation,你也可以add a bounty引起更多的关注。 嗨,我应该更清楚地表达它作为答案,这并不是一个问题。我不是那么新:)

以上是关于OpenCV destroyWindow() 不做任何事情。的主要内容,如果未能解决你的问题,请参考以下文章

为啥不能在 Python 中运行 DestroyWindow 函数

带有 OpenCv 的 Qt 啥都不做

我需要在 SDL_DestroyWindow 之前调用 SDL_GL_DeleteContext 吗?

WM_CLOSEWM_DESTROYWM_QUIT学习总结(点击关闭按钮会触发WM_CLOSE消息,DestroyWindow API会触发WM_DESTROY和WM_NCDESTROY消息,MS(代

基于opencv,开发摄像头播放程序

Qt opencv编译详细教程(windows版)