今天我编译一个项目,需要用到 OpenCV 以编译项目。 这是我部署 VS2013-OpenCV 3.0.0 环境的笔记。
下载和安装 OpenCV
下载并解压 OpenCV
前往官方网站,下载对应版本 OpenCV,这次我下载的是 3.0.0 版本的,因为我用的是 VS2103 官方下载地址:跳转到 opencv.org 打开安装包,设置 opencv sdk 解压目录,点击 Extract 后解压。
设置 opencv 的环境变量
“开始菜单”-> “控制面板”->“系统”或在“计算机”上右键选“属性”打开系统设置窗口
选择“高级系统设置”打开“系统属性”窗口
选择“高级选项卡“,点击“环境变量”按钮打开“环境变量”窗口
在系统变量里找到 Path 变量,在 Path 中添加值 SDK 中的 bin 目录。本人解压时设置的目录是 E:\SDK,用到是 32 位库,VC++ 用的是 2013,因此添加到 bin 目录为 E:\SDK\opencv\build\x86\vc12\bin。注:环境变量配置后,需重启系统才能生效。
VC++ 工程配置
打开 vs2013,选择新建项目。
选择 Visual C++ 模板创建空项目。
项目建好后,点击“菜单”->“项目”->“属性”,打开项目属性对话框,选择“C++ 目录”对 SDK 目录进行配置。
选择“包含目录”,在下拉菜单中选择“编辑”,打开包含目录对话框。添加前面介绍过的 SDK 中的 include 文件夹的路径。
选择“库目录”,在下拉菜单中选择“编辑”,打开包含目录对话框。添加前面介绍过的 SDK 中的 lib 文件夹的路径。这里需要注意点,开发 32 位程序选择 x86 目录下的,64 位则选 X64 目录下的,同时还要根据自己所用的 VC++ 版本选择相应的 vcXX 目录。我要开发的是 32 位程序,使用的 2013 因此,选择的是 X86 中 vc12 下的 lib 文件夹。
接下来是配置项目所需的静态链接库。选择“链接器”下的“输入”,在“附加依赖项”下拉项中选择“编辑”,打开附加依赖项对话框。
在附加依赖项中添加 opencv_core248d.lib,这是 opencv 最基本的类和函数;添加 opencv_highgui248d.lib,它是 opencv 提供的简单 gui;添加 opencv_imgproc248d.lib,它提供了一些基础的图像处理操作。简单的运用,这三个库基本够了。用到其他 opencv 功能时,只需按照所用函数所在的头文件名,添加相应的 lib 文件就行了。
注:前面设置的是新建工程的 Debug 版配置,切换到 Release 用同样的方法配置就可以,唯一的区别是 Debug 版用到的 dll 和 lib 文件都有后缀 d,Release 版使用的不带 d。配置 Release 的附加依赖项时别忘了把 d 删掉。
测试 OpenCV 配置是否正确
在解决方案中,在项目上右键,选择添加新建项。
在对话框中选择添加 C++ 文件。
在新建的 C++ 文件中写上一个最简单的测试代码生成后运行。如果配置无误,生成的程序就能正常运行了。如果提示缺少 dll 文件,是环境变量没配置对,重新配置环境变量或将 SDK 中 bin 目录中的相应 dll 文件靠到工程目录下或系统所在盘 Windows\System32 下就可以解决。如果是提示链接错误,是附加依赖项没设置对,或没有添加够所需的 lib 文件。
这里来段用 OpenCV 打开并显示图片的代码
#include <opencv2\opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("E:/lena.png");
//新建一个矩阵用来存放从文件读取的图片
namedWindow("image",CV_WINDOW_AUTOSIZE);
//创建一个窗口,窗口标题设为 image,并设成自动大小
imshow("image",img);
//在 image 名字的窗口中显示 img 中的图像
waitKey();
//等待键盘输入
return 0;
//程序结束
}
按 Ctrl +F5 编译运行
测试成功!
例子中所用的测试图片是 OpenCV 自带的 lena.png。看过图像学书的是不是觉着这图很眼熟,似乎所有图像学的书都会用到这图。这图基本上可以算图像学的一个标准用图了,不过这图并不是完整版哦,它只是截取了其中的一部分。
OpenCV SDK 文件夹结构简介
解压后再解压目录下有 OpenCV 目录
在 opencv 文件夹下有 build 和 sources 两个文件夹,build 是 sdk 包,sources 是源码包(里面也有 opencv 使用例子源码)
在 build 文件夹下 include 是 C&C++ 头文件所在文件夹;doc 是文档文件夹;java 是 java 开发的库文件夹;python 是 pathon 开发库文件夹;x64 和 X86 是已编译好的 C&C++ 的 64 位和 32 位库文件夹,在它里面有 vc10、vc11、vc12 三个文件夹,分别对应 VC++2010、VC++2012 和 VC++2013。
因不同版本 VC++ 生成的库文件所需的运行时不同,因此配置 VC++ 工程时需要选择相对应的二进制库文件。在 vcXX 文件夹下 bin 文件夹是公用的动态链接库,在系统环境变量里配置后,所以 opencv 工程都能共享他们;lib 文件夹是动态库隐式调用所需的静态链接文件;staticlib 文件夹是静态链接库,需要生成不依赖动态库的程序就是用它们。