简单的OpenCV命令可以在调试模式下工作,但不能在发布模式下工作

Simple OpenCV command works in Debug mode but not Release mode

本文关键字:工作 模式 但不能 布模式 命令 调试 简单 OpenCV      更新时间:2023-10-16

我正试图用CascadeClassifier::load()加载到一个训练xml文件中,它在调试模式下工作得很好,但在发布模式下我遇到了运行时错误。

我得到的错误是:

Testing.exe中0x000007feefbf4938处未处理的异常:0xC0000005:写入位置0x0000000000000027时发生访问冲突。

我的代码如下:

CascadeClassifier c;
if (!c.load("C:/data/haarcascade_frontalface_alt.xml"))
{
    exit(1);
}

代码在加载线上崩溃。为什么会发生这种情况?

确保在发布模式下运行时链接到openCV的发布dll。当我尝试使用混合发布和调试dll加载文件时,我也遇到过类似的问题。

请参阅此帖子。

没有猜测为什么load行只会在发布版本中导致访问冲突。因此,下一步是通过日志记录、printfs或任何对您有用的东西来检测您的OpenCV版本二进制文件。这种类型的调试在这种情况下有效,因为您有OpenCV的源代码,并且能够使用VS2010重新编译。

我认为您的错误在于XML文件的"加载"和项目设置中的"工作目录"设置。

如果转到项目的"属性"窗口,请确保"调试"选项中的"工作目录"是正确的。更改"配置"(在"调试"answers"发布"之间),您应该能够进行比较。

当您试图读取不存在的文件时,有时会出现此错误。使用"错误"工作目录中的本地路径通常是在一种配置而非另一种配置中工作的罪魁祸首。

编辑:

该文件存在吗?它是正确的XML吗?

这很奇怪。检查调试和发布版本的选项,确保使用的是正确版本的库。

我试着在我的一个项目上运行代码,在调试和发布版本中都很好,使用opencv 2.3.1

试着将这些代码行添加到另一个项目中,发布版本正在运行,并且您已经使用了opencv。如果它有效,那么问题出在配置设置上。