先说结论:

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

Opencv出现“_pFirstBlock == pHead”错误的解决方法的更多相关文章

  1. Eclipse启动时发生An internal error occurred during: "Initializing Java Tooling".错误的解决方法

    问题描述: Eclipse启动时发生An internal error occurred during: "Initializing JavaTooling".错误的解决方法 解决 ...

  2. GCC-4.6.3编译linux2.6.32.12内核出现“重复的成员‘page’”错误的解决方法

    使用gcc4.6.3编译linux2.6.32.12内核出现错误如下: In file included from drivers/net/igbvf/ethtool.c:36:0: drivers/ ...

  3. Linux系统Vsftp 传文件出现 553 Could Not Create File错误的解决方法

    解决方法: 登录出现了这个错误提示:553 Could not create file SELinux设置如下 查看SELinux设置 [root@localhost ~]# getsebool -a ...

  4. [转]权限问题导致Nginx 403 Forbidden错误的解决方法

    权限问题导致Nginx 403 Forbidden错误的解决方法 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-08-22 这篇文章主要介绍了权限问题导致Nginx 403 F ...

  5. ueditor上传大容量视频报http请求错误的解决方法

    故障现象: 当使用百度编辑器ueditor上传大容量视频或大容量图片的时候,编辑器报"http请求错误"的解决方法详解: 原因分析: 目前很多CMS整合了百度的ueditor编辑器 ...

  6. window10 安装出现the error code is 2503错误的解决方法

    window10 安装出现the error code is 2503错误的解决方法:  设置 C:\WINDOWS\TEMP的权限

  7. MyEclipse+Tomcat 启动时出现A configuration error occured during startup错误的解决方法

    MyEclipse+Tomcat 启动时出现A configuration error occured during startup错误的解决方法 分类: javaweb2013-06-03 14:4 ...

  8. Jquery中使用setInterval和setTimeout会提示缺少对象的错误,解决方法如下:

    直接在ready中调用其他方法,会提示缺少对象的错误,解决方法如下: 方法1. 应用jQuery的扩展可以解决这个问题. $(document).ready(function(){ $.extend( ...

  9. ASP.NET MVC 3 loginUrl自动变成Account/Login,并且发生404错误的解决方法

    http://www.cnblogs.com/think8848/archive/2011/07/08/2100814.html ASP.NET MVC 3 loginUrl自动变成Account/L ...

随机推荐

  1. svn从Windows服务器上迁移到Linux上

    svn从Windows服务器迁移到Linux服务器    author:headsen chen   2017-10-16  16:50:32  个人原创,转载请注明.否则依法追究法律责任       ...

  2. docker初次体验-管理MySQL+tomcat镜像

    引言 平时经常用linux,我没少吃苦后悔linux没好好研究研究.装一些软件配一些环境时很是害怕,多亏有了docker.docker是一个应用容器引擎,可以管理很多的软件镜像,这些镜像被官方放在了d ...

  3. 深度学习基础网络 ResNet

    Highway Networks 论文地址:arXiv:1505.00387 [cs.LG] (ICML 2015),全文:Training Very Deep Networks( arXiv:150 ...

  4. SoupUI安装

    (仅供学习,严禁用于商业应用) 今天开始在公司需要做websocket接口测试,以前从来没有接触过,对美好生活充满了向往啊,今天从安装开始吧! 至于什么是websocket自行百度,我也是百度出来的, ...

  5. Ambari Log Search

    文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/8630195.html  转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点, ...

  6. 用three.js创建一个简易的天空盒

    本文创建的天空盒是用六张图片来创建的.笔者会论述两种方法来创建,都是最简单基本的方法,不涉及着色器的使用.一种是创建一个盒子,然后将图片作为盒子6个面的纹理贴上来创建.另一种则是简单的将纹理作为场景的 ...

  7. 走进webpack(1)--环境拆分及模块化

    初级的文章和demo已经基本完成了,代码也已经上传到了我的github上,如果你对webpack的使用并不是十分了解,那么建议你回头看下走近系列,里面包括了当前项目中使用频繁的插件,loader的讲解 ...

  8. 【数据库】MySQL中的共享锁与排他锁

    转载:http://www.hollischuang.com/archives/923 在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库 ...

  9. Java中如何创建线程

    Java中如何创建线程 两种方式:1)继承Thread类:2)实现Runnable接口. 1.继承Thread类 继承Thread类,重写run方法,在run方法中定义需要执行的任务. class M ...

  10. python开发装饰器的应用

    python全栈开发-Day10 装饰器(闭合函数的应用场)   一. 装饰器 装饰器就是闭包函数的一种应用场景 什么是闭包函数?我们再来回忆一下: 闭包函数: 定义在函数内部的函数,并且该函数包含对 ...