所谓的安装,其实就是吧opencv的源码和编译好的dll库文件解压出来而已。目录自行选择,最好不要是中文路径。
之所以要配置环境变量,是因为Opencv使用的是动态链接库,在运行Opencv的程序时需要依赖这些动态链接库,配置环境变量,就是为了告诉程序,Opencv所依赖的动态链接库在什么地方。
因为我装的是VS2012对应的目录为vc11,进入opencv\build\x86\vc11\bin中,可以看到很多的*.dll文件,这些就是Opencv依赖的动态链接库。这里即便是x64的体统,也最好选择x86的库。(注:VS2013对应vc12,VS2012对应vc11,VS2010对应vc10)
在控制面板中搜索“环境变量”,编辑系统环境变量->高级->环境变量->系统变量->Path->编辑
在最后添加一个分号”;”后,再将上面的dll文件所在的绝对路径拷贝到这里来,最终写入的是;D:\ProgramFiles\opencv\opencv\build\x86\vc11\bin
在工程设置中选择Empty Project
找到Property Manager,如果没有看到,可以在view->Property Manager中找到这个选项卡。
选择Debug->Add New Project Property Sheet
将新建的属性表单的名字命名为OpenCV_Debug
因为Opencv是开发开放源码的,我们再使用Opencv的库函数时,可以直接查看源码。包含头文件的存放路径就是为了可以索引到源码,包含库文件是为了可以直接调用生成好的Opencv函数,而无需我们自己编译。
双击OpenCV_Debug,进入属性表单的编辑界面。
在VC++ Directories->Include Directories中添加OpenCV所有模块的头文件。
选择下拉,然后进入Edit,添加Opencv下include 的路径。
以同样的方式添加Opencv在Vs2012下的lib
添加的lib列表如下,其中d的意思是debug,即这些库是在debug模式下生成和使用的。
opencv_core249d.lib
opencv_imgproc249d.lib
opencv_highgui249d.lib
opencv_ml249d.lib
opencv_video249d.lib
opencv_features2d249d.lib
opencv_calib3d249d.lib
opencv_objdetect249d.lib
opencv_contrib249d.lib
opencv_legacy249d.lib
opencv_flann249d.lib
从2.2开始再做一次,只是将Debug换成Release。在最后添加的依赖库文件列表如下,这里由于是Release模式,后面没有d。
opencv_core249.lib
opencv_imgproc249.lib
opencv_highgui249.lib
opencv_ml249.lib
opencv_video249.lib
opencv_features2d249.lib
opencv_calib3d249.lib
opencv_objdetect249.lib
opencv_contrib249.lib
opencv_legacy249.lib
opencv_flann249.lib
最终可以得到如下的两种配置文件:
对于后来新建的工程,就无需在重复上面的操作了,只需要在Property Manager中选择
Add Existing Property Sheet ,选择刚才建立的Debug配置和Release配置即可。
由于C++没有垃圾管理机制,内存的分配和释放都需要程序员自己来控制,在C++代码中,内存泄露如果不严重的话,短时间内对程序没有太大的影响,在进程终止时,所分配的内存便会释放,但是长时间运行的话,其性能上的消耗是惊人的,甚至会影响其他程序的运行同时,内存问题本身是不明显的,当出现异常时很难检查。
VLD是一款在windows下使用的C++内存泄露检查工具,可以很好的检查内存泄露问题,只能在Debug下使用。下载visual leak detector安装后,可从2.3步开始
添加vld的头文件
添加vld的库文件
添加vld的库依赖
使用时,只需要添加#include <vld.h>即可
#include <opencv2/opencv.hpp> #include <vld.h> using namespace cv; const string windows_name ="ImageWindows"; int main() { //type指的是打开图片的方式,此处是根据图片的原始数据打开真实的图片 inttype = CV_LOAD_IMAGE_ANYCOLOR | CV_LOAD_IMAGE_ANYDEPTH; Matimg = imread("./image/EVA_03.jpg",type);//此处我新建了一个文件夹image //在image下放了一张图片EVA_03.jpg if(img.empty()) { fprintf(stderr,"Error:loadimage failed."); return-1; } namedWindow(windows_name,CV_WINDOW_AUTOSIZE); //创建一个名字为windows_name的窗口 imshow(windows_name,img); //在窗口windows_name中显示刚才的图片 waitKey();//等待一个按键,然后退出程序 return0; }
运行效果如下图:
在Debug模式下,可以看到VLD的输出。