2012-01-14 66 views
12

我想加载在训练xml文件CascadeClassifier::load(),它在调试模式下工作得很好,但在发布模式我得到一个运行时错误。简单的OpenCV命令工作在调试模式,但不是发布模式

我得到的错误是:在Testing.exe在0x000007feefbf4938

未处理的异常:0000005: 访问冲突写入位置0x0000000000000027。

我的代码如下:

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

的代码崩溃的加载线。为什么会发生?

+1

这是你的代码吗?如果是的话,这可能是OpenCV中的一个错误。如果没有,请删除所有代码,并尝试本地化错误 – Sam 2012-01-16 09:14:58

+0

Windows的C++界面给了我很多麻烦。尝试使用OpenCV的C接口并准备好庆祝。这个问题值得赞赏。 – karlphillip 2012-01-16 17:11:23

+7

您是否为您的应用程序的调试版本和Release Opencv for Release版本的应用程序链接了调试OpenCv库?我可能是worng,但你应该检查它。 – Patryk 2012-01-17 18:53:37

回答

8

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

请参阅this后。

+0

在链接器中添加** Additional Dependencies **时,我犯了同样的错误。从'opencv_world330d.lib'更改为'opencv_world330.lib'为我解决了这个问题。 – Sndn 2017-12-14 11:29:00

0

没有猜测为什么您的load行只会对发布构建造成访问冲突。因此,下一步就是使用日志记录或printfs或任何适用于您的OpenCV版本二进制文件。这种类型的调试适用于这种情况,因为您拥有OpenCV的源代码并且可以使用VS2010重新编译。

0

我相信你的错误是在你的项目设置中的'加载'的XML文件和'工作目录'设置。

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

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

编辑:

这是否文件都存在,这是正确的XML?

+0

我会检查你的建议,当我回家时,但是它存在并且是正确的。就像我说的,这在调试模式下工作得很好,但不是释放模式。 – zebra 2012-01-17 23:27:42

+0

是的,但是如果你是从VS开始的代码,即使在发布模式下,它仍然会看上面提到的“工作目录”,看看它应该在哪里生活。如果这与调试模式不一样,并且您在任何地方使用本地路径(可能是这种情况),则可能是您的问题。 – g19fanatic 2012-01-18 12:44:30

0

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

我试图运行在我的一个项目的代码,无论是在调试和发布版本的做工精细,用OpenCV的2.3.1

尝试添加几行代码到另一个项目,与发行版本的工作,并在那里你已经使用opencv。如果有效,那么问题出在配置设置中。

相关问题