我有一个窗口,我打开就像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;
}
答案 0 :(得分:-1)
可能的解决方案是:
cvStartWindowThread();
靠近代码的开头,(主要的开始)。这可以帮助调用cvDestroyWindow()时经常发生的慢速事件交换。您可以查看here了解更多详情。
然而,作为旁注,这不是完美的解决方案。它与我的一些代码配合得很好,但是当涉及到其他事件监听器如waitKey()时,我一直遇到问题,我想这是可以理解的。