Opencv出现“_pFirstBlock == pHead”错误的解决方法

先说结论:

opencv链接库使用错误。

1,确认VS工程属性中,opencv的链接库路径和版本正确。

      VS2013应该使用vc12目录,VS2012对应vc11目录。debug版和release版要区分。

2,VS工程的运行库参数应该使用"/MDd“。

3,系统环境变量Path中,opencv的目录和VS工程设置的路径 应该一致。(本次问题的原因!)

---------------------------------------------------------------------------------------------------

开发环境:

VS2013+Opencv3.0

错误现象:

Debug时,出现如下窗口。

调查经纬:

通过调试,发现是在查找轮廓后,释放vector的地方报的错。写了个简单的代码试了一下。

#include <opencv2\opencv.hpp>

using namespace cv;
using namespace std;

void test(Mat src)
{
	vector<Mat> list;
	split(src, list);
}
void main()
{
	Mat src(300,300, CV_8UC3);
	src = 0;
	test(src);
	return;
}

在test()结束时,也会发生同样的错误。

上网查了一下,一般原因有两个:

------------------------------------------------------------------------

1,Opencv库链接错;

比如,Debug模式下链接了Release的库(opencv中*.d.lib是Debug版,不带d的是release版);

或者,还有一部分是因为VS2012使用了2013的库(Opencv目录下vc12是VS2013的库,而不是VS2012的);

please check, if you're linking to debug dlls (ending in *.d.dll) in debug mode. also, if you link against "multithreaded-dll" c-runtime

2,VS工程属性设置错误。

VS的工程属性里面应该使用/MDd,不能使用/MTd;

------------------------------------------------------------------------

但是查了下,我的VS工程设置都没有问题。于是拿Depends查看一下编译后的exe文件,显示链接的Opencv库也是正确的。

又看了一下DLL库的属性,显示是链接到了vc11目录下。

突然想到,原来电脑上用的是VS2012,使用的是vc11目录下的opencv库,所以系统变量里面设置的也是cv11的路径。

改用VS2013后,虽然工程属性里面都改成了vc12目录,但是运行exe程序时,还是会根据PATH系统变量,去找到vc11目录下的库文件。

※ depends 在VS2008以后就不支持了,需要到官网下载:http://www.dependencywalker.com/

解决方法:

修改系统环境变量PATH,把opencv库的目录改为vc12目录下。重启VS,再次调试,错误消失。

※ 前提,要确认VS工程属性中的链接库设置正确。

参考链接:

http://answers.opencv.org/question/35437/problem-using-stdvector-as-a-parameter-in-some-opencv-functions/

https://stackoverflow.com/questions/26803975/debug-assertion-failed-pfirstblock-phead-using-opencv

https://stackoverflow.com/questions/21261709/debug-assertion-failed-expression-pfirstblock-phead-using-opencv-and-c-tr

转载于:https://www.cnblogs.com/anderzheng/p/8643816.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值