近年来随着人工智能和机器视觉的日益火爆,OpenCV作为机器视觉领域内的利器也得到了长足和快速的发展。作为OpenCV的忠实粉丝,一直使用的是OpenCV2的版本,但是OpenCV3相对于OpenCV2提供了不少新的特性,在加速等性能上作了很多优化,并且经过了Alpha、Beta、3.1.0几个版本后,至今已经更新到了3.2.0版本,稳定性上也已经做得很好,所以,从今年开始,决定在以后的开发中使用OpenCV3的版本。
但是,官网(opencv.org)目前提供的安装包只提供了vs2015(vc14)的编译版本。所以,若想在其他编译环境(如vs2010、vs2012、vs2013等)下使用,需要下载opencv3.2.0的源码,在cmake下自行编译。
先说明一下,我是在64位WIN7+VS2013环境下使用CMake3.7.2进行编译的,在其他Windows版本、其他VS版本、其他OpenCV版本和其他CMake版本下的编译过程都是类似的。
具体的编译和配置步骤如下:
1、在官网(opencv.org)下载OpenCV3.2.0源码(Sources)。
2、将源码压缩包解压到编译目录下,并在同一目录下新建build_64和msvc_2013两个文件夹,前者作为Cmake编译目录,后者作为编译后的安装目录。
3、打开CMake,开启编译选项的配置。设置好source code目录和build目录,点击Configure按钮,选择VS版本,这里选择的是win64 VS2013,选择本地编译器作为默认编译器,点finish,即开始配置过程。(配置过程需要一段时间,可以先干点其他的,等待初步配置完成,注意保证网络的畅通,Cmake的过程中需要下载第三方库)。
4、初步配置完成,如下图所示。需要修改一下相关选项,这里只需要修改两个地方,其他默认即可,一是将CMAKE_INSTALL_PREFIX修改成之前创建的msvc2013_64目录,二是点击add Entry按钮,添加CMAKE_DEBUG_POSTFIX选项,值设为“d”,用于区分debug和release版本,否则编译安装时debug版本会被release版本覆盖。设置好后,再点击configure,配置完成后点击“generate”生成编译工程。
5、VS2013下编译与安装。经过上一步后,我们在build_64目录下即可看到CMake生成的编译工程,如下图所示。
打开opencv.sln,解析完成后,先在Debug下对工程进行编译(BUILD->Build Solution),编译完成后,将INSTALL设置为启动工程(在INSTALL右键->Set as startup project),然后进行安装(BUILD->Project Only->Build Only Install);再在Release下进行编译和安装(和Debug类似)。
6、添加环境变量。安装完成后,我们在vs2013_64目录下即可看到一个include文件夹和x64文件夹,我们在x64目录下逐级找到bin文件夹,将bin的路径添加到系统的环境变量里,如下图所示。
7、创建vs工程属性配置文件。为了方便避免opencv属性配置时的各种麻烦,这里采用创建属性配置文件的方式,将如下文件保存到一个.props类型的文件中(如opencv3.2.0.props),放置到一个方便的位置,使用到opencv时,只需要将其添加到工程属性单下即可(在Property Manager窗口中在工程上右键->Add Existing Property Sheet,找到opencv3.2.0添加即可)。注意:额外依赖项(AdditionalDependencies)是添加编译安装目录里lib文件夹下所有的Debug库和Release库,要保证输入的文件名正确,否则编译会报错。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<IncludePath>D:\Libraries\OpenCV3.2.0\msvc2013_64\include;$(IncludePath)</IncludePath>
<LibraryPath Condition="'$(Platform)'=='X64'">D:\Libraries\OpenCV3.2.0\msvc2013_64\x64\vc12\lib;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup>
<Link Condition="'$(Configuration)'=='Debug'">
<AdditionalDependencies>opencv_calib3d320d.lib;opencv_core320d.lib;
opencv_features2d320d.lib;opencv_flann320d.lib;opencv_highgui320d.lib;
opencv_imgcodecs320d.lib;opencv_imgproc320d.lib;opencv_ml320d.lib;
opencv_objdetect320d.lib;opencv_photo320d.lib;opencv_shape320d.lib;
opencv_stitching320d.lib;opencv_superres320d.lib;opencv_video320d.lib;
opencv_videoio320d.lib;opencv_videostab320d.lib;opencv_viz320d.lib;
%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<Link Condition="'$(Configuration)'=='Release'">
<AdditionalDependencies>opencv_calib3d320.lib;opencv_core320.lib;
opencv_features2d320.lib;opencv_flann320.lib;opencv_highgui320.lib;
opencv_imgcodecs320.lib;opencv_imgproc320.lib;opencv_ml320.lib;
opencv_objdetect320.lib;opencv_photo320.lib;opencv_shape320.lib;
opencv_stitching320.lib;opencv_superres320.lib;opencv_video320.lib;
opencv_videoio320.lib;opencv_videostab320.lib;opencv_viz320.lib;
%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>
自此,大功告成!可以拿OpenCV3中图片的读取和保存进行测试。
2017.03.30