我有一个命令行openCV程序,我在Xcode中编写,打开两个XML文件,分析然后比较它们。但是,我现在正尝试使用QtCreator将该程序放入GUI中,以便更容易理解输出。
问题是,Qt似乎不喜欢cv :: FileStorage。程序编译得很好,但是当我实际尝试执行OpenCV部分时,它崩溃了,给出了这个错误:
OpenCV错误:空指针(NULL或空缓冲区) cvOpenFileStorage,文件 /tmp/OpenCV-2.4.3/modules/core/src/persistence.cpp,第2702行Qt有 捕获了从事件处理程序抛出的异常。抛出异常 Qt不支持来自事件处理程序。你必须重新实现 QApplication :: notify()并捕获所有异常。
该程序意外结束。
有谁知道为什么Qt似乎不喜欢运行这个程序?或者,如果有一种方法可以将OpenCV程序干净地集成到Qt中?
N.B。这就是Qt GUI的样子:
用户使用相关按钮选择两个XML文件。然后存储这些文件的路径并显示在按钮旁边的框中。然后我使用以下内容将QStrings转换为std :: strings:
std::string file1path = file1Name.toUtf8().constData();
std::string file2path = file2Name.toUtf8().constData();
然后将file1path和file2path传递给cv :: FileStorage命令,如下所示:
//Create File Storage
FileStorage storage1;
storage1.open(file1path, FileStorage::READ);
FileStorage storage2;
storage2.open(file2path, FileStorage::READ);
答案 0 :(得分:0)
具体而言,这不是Qt OpenCV在使用fileStorage时出现错误,文件不存在,不可读,或者您试图读错类型。
Qt为您提供了该错误,因为异常已达到未经检查的异常而非openCv的常规错误处理程序,这将打印更有用的错误。
您可以通过向QApplication
添加方法,为Qt应用添加全局激活处理程序bool QApplication::notify ( QObject * receiver, QEvent * event )
{
try{
return QApplication::notify( received, event );
}
catch ( const std::exception &e )
{
QApplication::postEvent( this, new MyEvent( e.what() );
}
catch ( ... )
{
}
答案 1 :(得分:-1)
如果您使用“/”,请尝试将“”替换为“/”