前言:opencv官方提供的build并不包含全部的功能,比如本人最近接触到的SURF特征提取,这些功能都集成在了contrib模块中,需要我们自己到opencv的官方GitHub上下载contrib源代码,自行编译。编译过程比较容易出错又特别耗时,花了将近一整天的时间才编译好,这里做一下整理
环境:VS2017+Opencv4.0+contrib+CMake 3.13.4
一、获取contrib
opencv的GitHub:https://github.com/opencv
在Branch中点击tags选择对应好版本的contrib,点击右侧的download即可,下载完解压缩放到opencv目录下。
具体见下面两图
二、使用CMake配置好VS项目
这里我们先设置好source目录和build目录(注意这个source是opencv而不是contrib的目录)
勾选BUILD_opencv_world,这样最后可以生成一个包含所有库的world,不用在项目中添加大量的库,只需要添加这一个即可,非常省心
勾选OPENCV_ENABEL_NONFREE,这一步非常重要,我一开始没勾选它,在用一些算法比如SURF和SIFT的时候会报错,而且找了半天错误
其次找到extra_modules_path这一行,填入contrib模块目录,需要填到modules这个目录。其他的功能就依个人需求来选择了
然后就可以点击configure开始配置,需要等很长时间,然后很多人到这里就开始出错了,我出现的错误是下面两个图。
出错的原因是从外网下载资源,因为下载速度太慢导致超时,从而判定下载失败
解决方法:CMake配置失败会生成一个名为CMakeDownloadLog的文件,路径上面两个图里都有(不是红线部分,在红线上面),里面记录了下载失败的文件名和指定路径,见下图的红线处,百度文件名(不用带那串奇怪的字符),自行下载,下载好以后放到红线处的指定目录,并修改为指定的文件名(这时候要带上那串字符),再configure即可。如果CMake没有红色部分,就可以generate生成VS工程,生成完毕open project,打开sln文件
三、使用VS编译工程
来到VS界面,直接右键解决方案->生成解决方案,漫长的等待,没有提示错误就OK。推荐在release和debug下都编译一次。
编译好以后把左侧目录往下翻,找到INSTALL这项,右键->仅用于此项目->仅生成INSTALL,几秒就OK
这样就在build目录下生成了一个名为install的目录,以后工程中需要配置的文件都在里面
include就是该目录下的include
lib在x64\vc15\lib中
dll在x64\vc15\bin中
至此contrib编译完成,其实就是把contrib连带opencv编译了一次