vs2008调用opencv2.4.9的imread()函数失败解决办法

这两天在看opencv的C++接口函数,刚开始就出现问题:

一个简单的显示图像的程序,就是运行不成功:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <string>
using std::string;
using namespace cv;
int main()
{
	string str="E:\\test\\LENA.BMP";
	Mat img1= imread(str);
	namedWindow("LENA");
	imshow("LENA",img1);
	waitKey();
	return 1;
}

开始还怀疑是不是自己太久没写代码,忘了文件绝对路径的写法,查了下,斜杠\是保留符号,所以要正确编译的话需要两个斜杠\\,并没有错。

用绝对路径的话就imread()这一步内存溢出:

图像直接放工程目录下的话读出来的图像就是空的:

纠结了一下午,终于找到了问题所在:

解决思路:

1、debug和release添加的库是否正确。

网上说如果库没添加正确就会出现这个情况,debug的应该是有XXXd.lib后缀的,但我的库是添加正确的。

debug加的库:

opencv_calib3d249d.lib

opencv_contrib249d.lib

opencv_core249d.lib

opencv_features2d249d.lib

opencv_flann249d.lib

opencv_gpu249d.lib

opencv_highgui249d.lib

opencv_imgproc249d.lib

opencv_legacy249d.lib

opencv_objdetect249d.lib

opencv_ts249d.lib

opencv_video249d.lib

opencv_nonfree249d.lib

opencv_ocl249d.lib

opencv_photo249d.lib

opencv_stitching249d.lib

opencv_superres249d.lib

opencv_videostab249d.lib

Release加的库:

opencv_calib3d249.lib

opencv_contrib249.lib

opencv_core249.lib

opencv_features2d249.lib

opencv_flann249.lib

opencv_gpu249.lib

opencv_highgui249.lib

opencv_imgproc249.lib

opencv_legacy249.lib

opencv_ml249d.lib

opencv_objdetect249.lib

opencv_ts249.lib

opencv_video249.lib

opencv_nonfree249.lib

opencv_ocl249.lib

opencv_photo249.lib

opencv_stitching249.lib

opencv_superres249.lib

opencv_videostab249.lib

2、vs2008不支持opencv2.4.9

查看添加包含库文件路径发现:D:\Program Files\opencv2.4.9\build\x86\vc10\lib,我采用的是vc10版本的库,而opencv2.4.9中没有vc9版本的。用vs2010重新新建了一个项目,结果运行成功,奔溃。。。

先前用的都是c接口的函数,估计没有大的影响,结果这次用c++接口函数则出现了这么个问题,还好只是这个简单程序调试时就发现了这个隐患,要不然后面搞大工程时遇上就麻烦了。

如果要在vs2008上使用opencv2.4.9,需要用cMake自己重新编译一个库。

vs2008调用opencv2.4.9的imread()函数失败解决办法,布布扣,bubuko.com

时间: 07-11

vs2008调用opencv2.4.9的imread()函数失败解决办法的相关文章

android 当ListView滚动时自动调用 onCheckedChanged 导致CheckBox 状态不停变化 的解决办法

今天在做一个含有CheckBox 的ListView时,发现当初始化CheckBox的状态后, 滚动ListView,其中CheckBox 的选中状态不停的发生变化.最后发现原因是 ListView滚动时自动调用 onCheckedChanged 导致的.在查看了各种博客的解决办法后,国外的网站上有一个办法解决了我的问题.写下来分享一下. 在自定义Adapter的getView方法中这样写就行了. Java代码   //在初始化CheckBox状态和设置状态变化监听事件之前,先把状态变化监听事件

C++中new和delete的背后( call edx 调用虚表内的第二个函数(析构函数))

关于 C++中new背后的行为, 以前已经写过一篇了 理解C++中new背后的行为, 但是里面也只是泛泛而谈,没有真凭实据, 下面我们从汇编的角度看C++编译器究竟在背后干了什么? 我们的代码很简单, 如下: #include <iostream> class A { public: virtual void print() { std::cout << 10; } virtual ~A() { std::cout << "~A()"; } }; c

调用 get(fgetc) 和 putc(fputc) 函数进行输入、输出

当成功地打开文件后,接下来的事情就是对文件进行输入或输出操作,最简单的是调用 getc(或 fgetc) 和 putc(或 fputc) 函数进行字符的输入和输出. 1.调用 putc(或 fpuct) 函数输出一个字符 putc 函数的调用形式如下: putc(ch, fp); 这里 ch 是待输出的某个字符,它可以是一个字符常量,也可以是一个字符变量:fp 是文件指针.putc(ch, fp) 的功能是将字符 ch 写到文件指针 fp 所指的文件中去.如果输出成功,putc 函数返回所输出的

如何使用 JDBC 调用存储在数据库中的函数或存储过程

JDBC调用存储过程步骤:1 通过Connection对象的prepareCall()方法创建一个CallableStatement对象的实例.在使用Connection对象的prepareCall()方法时,需要传入一个String类型的字符串,该字符串用于指明如何调用存储过程{?= call <procedure-name>[(<arg1>,<arg2>, ...)]} {call <procedure-name>[(<arg1>,<a

webBrowser调用外部js文件和js函数(转载)

原文链接:http://fy5388.blog.163.com/blog/static/56499537201012594314130/ webBrowser调用外部js文件和js函数 '第一种方法:webbrowser动态调用html和js代码,都是动态的:代码示例: webBrowser1.Navigate("about:blank");webBrowser1.Document.OpenNew(True);webBrowser1.Document.Write("<H

boost在lambda表达式中调用占位符参数的成员函数的方法

boost中提供了lambda表达式的用法,但是lambda表达式的功能还不是很强大,在其中只能对lambda的占位符参数_1等使用最基本的操作符,如+-*/,可是很多时候如果传入的占位符参数是一个对象指针的话,我们可能想要调用这个类的成员函数. 我在开发中遇到了这个问题,需要在stl的算法中传入一个函数来调用对象的比较函数,因为感觉这样太麻烦,还需要重新定义一个函数,所以想起了lambda表达式,c++11的lambda表达式我倒是没试过,可是受项目开发环境所限,只能选择boost.但是我用的

C调用lua的table里面的函数

网上搜索C.C++调用lua函数,有一大堆复制粘贴的. 但是搜索<C调用lua的table里面的函数> 怎么就没几个呢? 经过探索,发现其实逻辑是这样的: 1.根据name获取table :并判断是否为table 2.根据 name2 获取table的成员变量或方法,并判断栈顶的是否为函数 3.将函数的参数压栈,然,没有可以传入一个nil: 4.调用lua_pcall 跟调用普通lua函数的方法就一样了. 代码如下: bool call_table_func(const char * tabl

Android Native层Binder.transact()函数调用 Binder.onTransact() 函数失败分析

Q:Android Native层Binder.transact()函数调用 Binder.onTransact() 函数失败? 在Android Native层调用Camera.h中的api实现一个截屏功能的应用时,发现通过gCamera->setListener(new ScreenCaptureListener())设置到Camera的mListener的用于接收Camera预览数据的回调函数没有被调用,导致截屏失败? 注: Camera类文件汇总: libcamera_client.so

关于MATLAB中xlswrite函数写数据出现服务器异常情况的解决办法

在网上找了半天解决办法,也没有找到,在此共享我自己的一个问题,不具有普遍性,仅作参考! 问题描述:MATLAB调用xlsread函数出现问题,第一次运行的时候,出现服务器异常,再次运行能够正常读取数据: 在调用xlswrite函数时,一直出现服务器异常状况,不能将数据写入excel表格中. 问题关键:不是MATLAB的原因,问题出在excel软件上! 问题解决:xlswrite函数在调用时会占用excel的com端口,所以要保证在调用时这个端口是开放的,也就是没有被其他程序占用.打开excel(