gpt4 book ai didi

c++ - 过时 - OpenCV 的错误模式

转载 作者:太空狗 更新时间:2023-10-29 20:32:20 27 4
gpt4 key购买 nike

我正在使用 OpenCV 1 进行一些图像处理,并且对 cvSetErrMode 函数(它是 CxCore 的一部分)感到困惑。

OpenCV 具有三种错误模式。

  • 叶:调用错误处理程序后程序终止。
  • 父级:程序没有终止,但调用了错误处理程序。
  • Silent:类似于Parent模式,但不调用错误处理器

在我的代码开始时,我调用 cvSetErrMode(CV_ErrModeParent) 从默认的“叶”模式切换到“父”模式,这样我的应用程序就不会因异常/断言弹出而终止。不幸的是,“ parent ”模式似乎不起作用。我仍然会弹出消息对话框,我的应用程序仍然会终止。

如果我调用 cvSetErrMode(CV_ErrModeSilent) 然后它实际上变得安静,并且不再退出应用程序或抛出一个对话框......但这也意味着我不知道发生了错误。在这种情况下,我认为模式设置正确。

有没有其他人以前出现过这种行为并且可以推荐解决方案?

引用资料:

最佳答案

我要回答我自己的问题,因为经过一些摆弄之后我已经知道会发生什么。

当您切换到“父”模式而不是叶模式时,会出现一个名为 cvGuiBoxReport() 的错误处理程序。 cvGuiBoxReport() 是默认的错误处理程序。似乎即使在父模式下,cvGuiBoxReport() 仍会终止您的应用程序!糟糕。

因此,为了解决这个问题,您可以编写自己的错误处理程序,并重定向要处理的错误而不终止应用程序。

示例错误处理程序:

int MyErrorHandler(int status, const char* func_name, const char* err_msg, const char* file_name, int line, void*)
{
std::cerr << "Woohoo, my own custom error handler" << std::endl;
return 0;
}

您可以设置父模式并重定向您的错误:

cvSetErrMode(CV_ErrModeParent);
cvRedirectError(MyErrorHandler);

关于c++ - 过时 - OpenCV 的错误模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2182235/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com