Windows下轻松配置openCV开发环境

时间:2021-08-18 03:31:08

注:新版本的OpenCV(3.0及以后)很多设计都跟本文撰写时不同了,不能保证本文内容还适用于新版本

openCV是一个功能强大的开源计算机图形库,在计算机视觉领域有着广泛的应用。本文以openCV2.4.9为例(但不限于2.4.9),介绍Windows下openCV库的安装与编译。


如果你只是想进行简单的opencv配置,可以先试试这个小工具(下载地址

Windows下轻松配置openCV开发环境

支持版本:Visual Studio2008及以上版本,openCV2.3.1及以上版本。

软件要求:.net framework 3.5,其实装了VS2008以上就行了。

使用方法:下载openCV后解压得到opencv文件夹,把小工具放到build文件夹外,选择好安装路径,点击配置就行了。程序会自动检测系统内openCV支持的版本最高的VS并进行配置(也可以手动选择),并且自动生成属性表(属性表使用方法参照下文)。


openCV的安装与使用

一般来说,我们要调用某个使用C\C++编写的库,需要三步:
第一步,在编写代码的时候包含该库的头文件。
第二步,在编译程序的时候引用相应的库文件。
第三步,在程序运行的时候调用相应的DLL文件。


文件准备

openCV官方网站下载openCV2.4.9。

新建一个文件夹,路径、名称不含特殊字符即可,用来安装openCV。我把它建立在C:\opencv。为了简便,下文将其称为目标文件夹。
所谓的安装openCV其实就是简单地把openCV的头文件、库文件和DLL文件拷贝到目标文件夹。

1. 解压文件 

打开下载的OpenCV-2.4.9.exe,选择一个目录临时存放解压后的文件,这里我把它放在 D:\下。

解压完成后即可在解压目录下看到D:\opencv文件夹,内含sources跟build两个文件夹。

sources文件夹内包含openCV的所有源代码、帮助文档以及样例代码等。

而build文件夹内就是头文件、已经编译好的库文件以及DLL文件。


2. 获取头文件

打开build文件夹,可以看到里面包含了include、x86、x64、java和Python等文件夹。

include文件夹内就是openCV的头文件,把它拷贝到目标文件夹内。


3. 获取库文件和DLL文件

库文件需要根据自己使用的编译器来选定。

x86和x64文件夹内包含的就是openCV的库文件和DLL文件。

x86下对应的是32位VC++编译器,x64对应的则是64位的。
VS中默认的VC++编译器是32位的,所以这里选择x86。

打开x86文件夹,可以看到vc10、vc11、vc12代表VC++编译器的版本,vc10是指VS2010,vc11指VS2012,vc12指VS2013。事实上除了这里选择的文件夹不同以外,三个版本的VS下openCV的配置是完全一样的。所以本文同时适用于VS2010、VS2012以及VS2013

打开vc10文件夹,可以看到
Windows下轻松配置openCV开发环境

bin文件夹内包含了openCV的DLL文件。

lib文件夹中包含的是动态库文件,而staticlib文件夹中则是静态库文件。


我们使用动态库文件,所以把bin和lib文件夹拷贝到目标文件夹中。 
Windows下轻松配置openCV开发环境
这样,openCV的安装就完成了。


配置环境变量

把openCV的DLL文件目录加入环境变量。这样做的目的是程序运行时可以找到需要调用的openCV的DLL文件,避免出现“系统中缺少opencv_XXX.dll”这样的错误。

右键点击桌面上的“计算机”->属性->高级系统设置->环境变量,这里有用户变量和系统变量,两个都可以。找到Path变量,双击打开,在变量值一栏开头加入以下路径:C:\opencv\bin;
记得后面要有英文的分号和其它环境变量隔开。

如果前面使用了静态库,这一步可以跳过。

Windows下轻松配置openCV开发环境



配置Visual Studio

在Visual Studio中调用外部库比较好的一种方式就是使用项目属性表。跟直接修改项目属性相比,它可以多次反复调用,并且对于添加了什么外部库也可以一目了然。属性表分为Debug版和Release版,分别对应程序编译为Debug版和Release版时的属性。

1. 建立属性表

打开Visual Studio,随便建立一个空项目,在属性管理器中右键“Debug | Win32”->添加新项目属性表

Windows下轻松配置openCV开发环境


修改项目属性表的名字,名字改成什么没有限制,自己认得就好 

Windows下轻松配置openCV开发环境


点击“添加”后,即可在属性管理器中见到我们新建的属性表 

Windows下轻松配置openCV开发环境


2. 配置属性表

右键点击我们刚建立的属性表然后点击“属性”,或者直接双击。
在弹出的属性页中点击“VC++目录”,点击右侧的“包含目录”,添加包含openCV头文件的目录。之前我们把include文件夹放在了C:\opencv下,所以这里是C:\opencv\include 

Windows下轻松配置openCV开发环境


同理,修改“库目录”,添加C:\opencv\lib 

Windows下轻松配置openCV开发环境


然后打开属性页下的“链接器”->“输入”->“附加依赖项”,按照使用的功能模块添加相应的lib文件。比如,要使用openCV的图像处理模块,就在这里添加opencv_imgproc249d.lib。

Windows下轻松配置openCV开发环境

需要注意的是,这里配置的是Debug版的属性表,所以添加的lib文件名字都是以字母d结尾的,同名但是名字不以字母d结尾的库文件是release版的。

如果你在代码中用到了某个模块的变量、函数等,但却没有在这里添加相应的库文件,或者添加的库文件版本与当前使用的编译器不符,就会出现“无法解析的外部符号”这样的错误。


为了避免每次使用不同的模块都要添加一次,这里也可以一次性把所有的库文件都添加进去。

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_ml249d.lib
opencv_nonfree249d.lib
opencv_objdetect249d.lib
opencv_ocl249d.lib
opencv_photo249d.lib
opencv_stitching249d.lib
opencv_superres249d.lib
opencv_ts249d.lib
opencv_video249d.lib
opencv_videostab249d.lib


这里需要注意,如果使用的openCV版本不是2.4.9,库文件后面的249就需要换成其它版本号,比如openCV2.3.1的就需要改成opencv_highgui231d.lib,不要直接复制上面的内容。

同样地,我们也需要往“Release | Win32”添加新的属性表openCV Release,并配置相应的包含目录,库目录和附加依赖项。其中包含目录跟库目录的配置跟debug版是一样的,附加依赖项的配置,要添加的是相应的Release版库文件。


3. 属性表的使用

配置完成后,在“解决方案浏览器”里右键点击项目名称->“在资源管理器中打开”,可以看到文件夹内有两个属性表文件“openCV Debug.props”和“openCV Release.props”。里面就保存了我们之前进行的配置(包括包含目录、库目录和附加依赖项),将它们拷到目标文件夹中,方便以后调用。

之后再有要用到openCV的项目时就不需要重新配置项目属性,只要把这两个属性表添加到属性管理器中即可。不仅仅是openCV,其它外部库的调用也推荐通过属性表的方式进行。

VS2008及以下版本也可以通过全局配置的方式使openCV配置对多个项目生效,但这种做法并不推荐,这也是为什么微软从VS2010开始就把全局配置取消掉的原因。

Windows下轻松配置openCV开发环境


代码测试

下面用个小程序测试一下openCV是否添加成功。

#include <opencv2\highgui\highgui.hpp> 
//引入openCV的highgui模块,附加依赖项里也要添加opencv_highgui249.lib
//使用#include <opencv\cv.h>虽然更简单,但不推荐这样做
int main()
{
	IplImage *img;
	img = cvLoadImage("D:/opencv/sources/samples/cpp/lena.jpg");
	if (img)
	{
		cvNamedWindow("pic", CV_WINDOW_AUTOSIZE);
		cvShowImage("pic", img);
		cvWaitKey(0);
	}
	return 0;
}

代码的作用是加载opencv\sources\samples\cpp目录下一张文件名为lena.jpg的图片并显示出来,你也可以把图片换成自己的,效果如下图所示。 

Windows下轻松配置openCV开发环境


配置完成后,D盘下解压出来的opencv目录就可以删除了。




openCV编译

直接在官网下载的openCV已经自带了编译好的库文件和DLL文件,一般使用是不需要编译openCV的。但也有可能出现openCV预编译的库文件没有适合自己使用的VS版本的,比如openCV2.4.9就没有自带适用于VS2008的库文件,又或者需要对openCV的模块进行修改的情况。这时就需要对openCV进行重新编译。

文件准备

新建一个文件夹,用于临时存放编译openCV产生的文件。这里选择D:\build。

除了openCV源代码外,我们还需要准备以下文件:

  1. TBB(下载地址)
    TBB(全称Threading Building Blocks)是由 Intel针对多核平台开发的一个开源的C++的模板库,添加该库对openCV的多核性能有一定的提升,不使用也不影响openCV的正常编译。
    这里需要下载的是Window *OS版,下载后文件名应该类似于tbb42_20140122oss_win.zip,里面就包含了TBB的头文件、编译好的库文件和DLL文件。
    我们把它临时解压到D盘下,得到D:\tbb42_20140122oss文件夹。

  2. CMake(下载地址)
    要使用VS编译openCV的源代码,就需要利用CMake把openCV源代码组织成VS可以识别的“解决方案”。所以CMake在openCV编译里是必不可少的。它的安装很简单,一路下一步即可。

生成解决方案和编译参数调整

打开CMake,点击“Browse Source”,选择openCV的源代码所在目录,我们之前解压到了D:/opencv/source。
点击Browse Build”选择之前新建的临时文件夹。

需要注意的是,CMake中路径包含的都是左斜杠而不是Windows中常见的右斜杠。 

Windows下轻松配置openCV开发环境


点击Configure,在弹出的页面选择自己使用的编译器,这里选择Visual Studio 2010,点击Finish。 

Windows下轻松配置openCV开发环境


可以看到界面*多了很多编译参数设置。

Windows下轻松配置openCV开发环境


将滚动条拖到最下面,这里集中了最常用的参数设置。包括设置CUDA支持,Qt支持,TBB和IPP支持等,把“WITH_TBB”勾选上,表示添加TBB支持。如果你有购买并安装了Intel的IPP库,这里也可以把"WITH_IPP"勾选上,可以进一步提升openCV的性能(新的openCV3.0已经自带了IPP库)。

再点击Configure,稍等片刻。会有一项显示为红色,Value显示没有找到TBB的包含目录。 

Windows下轻松配置openCV开发环境

将它的Value改为D:/tbb42_20140122oss/include。然后点击Configure,完成后会有两项变成红色,再次点击Configure,就没有红色的条目了。

点击Generate生成解决方案。


编译

用VS打开临时文件夹下的openCV.sln文件。在“解决方案管理器”中展开CMakeTargets,右键点击INSTALL,选择“构建(Build)”,耐心等待编译完成。 

Windows下轻松配置openCV开发环境


完成后,再把编译选项从Debug改成Release,再次右键点击INSTALL,选择“构建”。 

Windows下轻松配置openCV开发环境


打开临时文件夹下的install文件夹,里面已经包含了openCV头文件和编译完成的库文件以及DLL文件。

把install\x86\vc10下的bin和lib文件剪切到install文件夹内。

打开D:\tbb42_20140122oss\bin\ia32\vc10,将文件tbb.dll和tbb_debug.dll拷贝到install\bin里。然后就可以把D:\tbb42_20140122oss文件夹删掉了。

这样install文件夹就相当于上面配置openCV的目标文件夹。使用方法跟之前提到的预编译的openCV文件是一样的。

将install文件夹拷贝到其他地方保存,build文件夹就没多大用处了, 可以删掉节约空间。