У меня есть окно, которое я открываю, как показано в учебниках OpenCV, но я хочу, чтобы я мог закрыть окно и делать другие вещи в своей программе. Изображение отображается правильно, но когда вызывается вызов destroyWindow, он ничего не делает и просто переходит к следующей строке кода. Я также попытался destroyAllWindow() также с тем же результатом. Большинство вопросов, связанных с этим, которые я нашел, для C, или они просто говорят use 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();
рядом с началом вашего кода (начало основного). Это может помочь в частом замедленном обмене событиями, которое происходит при вызове cvDestroyWindow(). Вы можете посмотреть здесь для получения более подробной информации.
Однако, как замечание, это не идеальное решение. Он хорошо работал с некоторыми из моего кода, но в настоящее время у меня возникают проблемы, когда задействованы другие прослушиватели событий, такие как waitKey(), которые, я думаю, понятны.