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

时间:2012-01-14 02:52:54

标签: c++ visual-studio visual-studio-2010 debugging opencv

我正在尝试使用CascadeClassifier::load()加载训练xml文件,并且它在调试模式下工作正常,但在发布模式下我收到运行时错误。

我得到的错误是:

  

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

我的代码如下:

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

代码在加载线上崩溃。为什么会这样?

4 个答案:

答案 0 :(得分:8)

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

请参阅this帖子。

答案 1 :(得分:0)

没有猜测为什么load行只会导致发布版本的访问冲突。因此,下一步是使用日志记录或printfs或任何适合您的OpenCV发布二进制文件。这种类型的调试在这种情况下有效,因为您拥有OpenCV的源代码以及使用VS2010重新编译的能力。

答案 2 :(得分:0)

我相信你的错误出现在XML文件的“加载”和项目设置中的“工作目录”设置中。

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

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

编辑:

该文件是否存在且是否是正确的XML?

答案 3 :(得分:0)

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

我尝试在我的项目上运行代码,并且在调试版和发布版中都运行良好,使用opencv 2.3.1

尝试将这些代码行添加到另一个项目中,发布版本正常,并且您已经在使用opencv。如果可行,则问题出在配置设置中。