1
我有一些代码不能按预期工作。我有一个应用程序使用imshow()来显示图像,但我也希望程序在没有显示的情况下仍然可以工作。出于这个原因,我试图从imshow(GTK-Warning:无法打开显示)中捕获异常,并在没有它的情况下继续执行程序(在每次imshow()调用时检查bool'display')。从imshow()和namedWindow()捕获opencv异常
//Display
bool display{false};
try{
std::cout << "Attempting to open display..." << std::endl;
cv::resize(image,modimage1,cv::Size(800,480));
cv::namedWindow("Output", CV_WINDOW_NORMAL);
cv::setWindowProperty("Output", CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLS$
cv::imshow("Output", modimage1);
cv::waitKey(1);
display = true;
} catch(cv::Exception& e){
const char* err_msg = e.what();
std::cout << "exception caught:" << err_msg << std::endl;
std::cout << "Failed to launch display, running without visual..." << s$
}
catch块被复制权了OpenCV的文档,所以我很惊讶,它不捕获异常。该程序的行为与没有try块时的行为完全相同。最后一个输出是“尝试打开显示”,然后我得到“GTK-Warning”并退出程序。
那么,缺少什么?我是否抓错了错误类型? openCV引发的异常不是真的,而是GTK/X /?
谢谢
我想我找到了答案,但我有另一个线程去测试解决方案。在这种情况下,X在引发异常之前终止程序,所以异常不会被捕获。我发现的唯一解决方案是首先使用gtk_init_check()。我的问题是我无法让我的应用程序与gtk库正确链接。 – DrTarr