捕获来自imshow()和namedWindow()的opencv异常
Catching opencv exception from imshow() and namedWindow()
我有一些代码没有按预期工作。我有一个应用程序,使用imshow()来显示图像,但我也希望程序仍然工作,如果没有显示。出于这个原因,我试图从imshow(gtk -警告:不能打开显示)捕获异常,并在没有它的情况下继续程序(bool 'display'在每次imshow()调用时检查)。
//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 -警告",它退出程序。
那么,缺少了什么?我是否捕获了错误的错误类型?是异常实际上不是由openCV抛出,但GTK/X/?
谢谢
我不认为这些是对奇怪的cv::Exception行为的完整解释。
try {
cap = new cv::VideoCapture(<file_name>);
} catch(cv::Exception& ex) {
cerr << "opencv exception." << endl;
}
如果找不到文件,则永远不会显示我的消息,但显示以下内容:
[ERROR:0] global/data/data/com.termux/files/home/opencv4/opencv/modules/video/src/cap.cpp (142) open videoio (CV_IMAGES): raise opencv exception:
OpenCV(4.3.0-pre)/data/data/com.termux/files/home/opencv4/OpenCV/modules/video/src/CAP_IMAGES .cpp:253:错误:(-5:错误参数)CAP_IMAGES:无法找到起始编号(在文件名称中):file_name在函数'icvExtractPattern'
在这种情况下,程序在捕获异常之前被终止。我的解决方案是以下代码:
//Display
bool display{false};
display = gtk_init_check(NULL, NULL);
if (!display){
std::cout << "Display unavailable, continuing without..." << std::endl;
}
if (display) {
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_FULLSCREEN);
cv::imshow("Output", modimage1);
cv::waitKey(1);
display = true;
}
这对我来说非常有效。主要的障碍是"#include",它需要一些努力才能链接到适当的库。
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- OpenCV C++.快速计算混淆矩阵
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 哪些库可以通过Opencv调整曝光率
- 安装opencv失败-粘贴CMakeError.log的内容
- C++中的openCV Mat访问冲突
- OpenCV Android C++ imwrite not found
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- CV_OCL_RUN宏如何在OpenCV(版本3.4.5)的goodFeaturesToTrack实现中工作?
- 如果不在窗口 10 中声明名为 openCV 的 openCV namedWindow,QT 图像显示将无法正常工作
- 在 OpenCV 的 namedWindow 之前或之后初始化 Tesseract
- opencv: namedWindow() 错误"can't open display"!
- 捕获来自imshow()和namedWindow()的opencv异常
- OpenCV:在imshow()之前需要namedWindow()