今天,我要来讲点有趣的事情。我这人吧,就爱倒腾各种新奇的东西,准确说是不停有新事物来缠上我。就在这两天,我想用 OpenCV 玩玩人脸识别,然后悲剧出现了,这 VS 给我头文件声明中的 face.hpp 加了个下划线,这最新版的 OpenCV 连个人脸识别模块都没有嘛?抱着疑惑我去访问了 OpenCV 的 github,只见里面这样写着 [1]:
This repository is intended for development of so-called "extra" modules, contributed functionality. New modules quite often do not have stable API, and they are not well-tested. Thus, they shouldn't be released as a part of official OpenCV distribution, since the library maintains binary compatibility, and tries to provide decent performance and stability.
So, all the new modules should be developed separately, and published in the opencv_contrib repository at first. Later, when the module matures and gains popularity, it is moved to the central OpenCV repository, and the development team provides production quality support for this module.
大致意思就是说,现在下载的都是 OpenCV 的主要模块,而额外的一些模块还在 github 上存着,因为它们的运行还不够稳定,需要程序员改进它们然后才能正式发布出来。当即无语,这版本高了反而东西都被分离出去了,怪不得这开源库占的空间变少了,这不就给我们添加麻烦了吗?然后,开发者在下面注明了解决方法,我先贴在这里,你们看看:
button. you will see all the opencv build parameters in the central interface
- configure
(use the search form to focus rapidly on it)
- OPENCV_EXTRA_MODULES_PATH
by the proper pathname to the
- OPENCV_EXTRA_MODULES_PATH
value using its browse button.
- <opencv_contrib>/modules
button followed by the
- configure
button (the first time, you will be asked which makefile style to use)
- generate
core with the method you chose (make and make install if you chose Unix makfile at step 6)
- opencv
我当时就想,还好他给了解决办法,我就下载个 CMake,照着这个来一遍,应该很容易就可以用我想用的模块了。不得不说,我真的太天真了,老外这清新脱俗的八句话,我整整搞了两天,two days! 经过我坚持不懈地查阅资料,千辛万苦之后终于可以用到那些额外的模块了。我做个整理写成这篇博文,希望大伙少走些弯路。
如果你们急需想用 OpenCV 的,请自动忽略我上面的废话。下面进入正题。
本人配置:Visual Studio 2015 Community,OpenCV 3.2,CMake 3.8.0
CMake 是一个跨平台的编译工具,可以模拟 Unix、Windows 等开发环境下的编译过程,至于它具体能用来做些什么,因为我也不甚了解,所以不做过多说明。在今天这个场合里,它将起到特别关键的作用。附上 CMake 官网的下载地址:
https://cmake.org/download/
然后在 Latest Release(3.8.0) 中的 Binary distributions 里面根据个人需要下载,msi 和 ZIP 都是可以的。我选择的是 windows64 位的 msi(以下是 msi 的操作过程)。
下载完成后开始安装。
按图片所示选择,然后点 Next。
这里选择 CMake 的安装地址,然后点 Next,安装开始。
安装结束后,打开安装所在文件夹,点击 bin 文件夹,里面的 cmake-gui 就是图形界面的 CMake 程序了。如下图
进行这一步之前,请确保各位电脑里已经有了 OpenCV,并是最新版本,不要问我为什么,为了保险。没有的,先去 OpenCV 官网自行下载。
然后,创建一个新文件夹作为编译文件的储存地点,新文件夹建立地点随意,我是建立在 OpenCV 的文件夹(这是我建的文件夹,主要模块,额外模块和合成模块都放在这个文件夹里,下面都按这个来,你们可以参照我的 )内,并命名为 opencvbuild,意为主要模块和额外模块合体后的 OpenCV。
打开 cmake-gui:
注意,第一个空一定要选择下载的 opencv 文件夹内的 sources 文件夹,第二个空格则选择你新建的文件夹,按你们的实际情况来填。然后点击 Configure(配置),出现如下窗口 在红框内选择你电脑里已有的 IDE,我是 VS 2015 64 位,故选择图中所示。
接着是漫长的等待,痛苦的东西就要来临了!
就看到它一直在 download 一个叫 opencv_ffmpeg.dll 的东西,停顿了好久,就给我弹出个错误提示。这提示主要是说哈希值不匹配,下载不成功。玩外国人的东西,沟通障碍经常发生,特别是下载东西的时候,真的很让人头疼,基本都是连接问题。既然自动下载不成功,那我们就改手动下载吧(当然你也可以选择多试几次 Configure,但是这样成功率低又耗费时间,我不推荐 )。图中黑框标出的是我们需要的 ffmpeg.dll 的哈希值。为了小伙伴们方便下载,我直接在这里附上网盘链接(ffmpeg.dll 和 ffmpeg64.dll 可以一起下载,都会出现错误提示的 )
ffmpeg.dll 哈希值 f081abd9d6ca7e425d340ce586f9c090
ffmpeg64.dll 哈希值 a423363a6eb76d362ca6c406c96c8db6 在此处下载
http://pan.baidu.com/s/1o7WzXcm
ffmpeg.dll 哈希值 89c783eee1c47bfc733f08334ec2e31c
ffmpeg64.dll 哈希值 35fe6ccdda6d7a04e9056b0d73b98e76 在此处下载
http://pan.baidu.com/s/1mibTCus
注意对照错误提示 (上图红框) 中的哈希值,下载一个网盘链接就够了,不要多下,也不要弄错哈希值!
比较常见的就是这两类 ffmpeg 文件,如遇到不包括上面的哈希值,则需要去 github 下载,网址在这里:
https://github.com/opencv/opencv_3rdparty/branches/all
实在不会的可以在下面留言,我再细说,这里不再赘述了。
将下载的 dll 文件替换下面地址内的 dll 文件,请自行对照查找该地址。
将下载的 dll 文件替换下面地址内的 dll 文件,自行对照查找该地址。
\opencv\sources\3rdparty\ffmpeg\downloads\f081abd9d6ca7e425d340ce586f9c090
上面的地址只是举了其中一个例子,最后一块 (f081abd….) 即下载的 dll 文件的哈希值,不要放错位置。
回到 cmake-gui 界面,点击 Configure 继续配置。竟然可以继续下去了,仿佛看到了希望,然而好景不长。
这回是开始下载一个叫 ippicv 的压缩包了,心里暗骂。但是已经有了前一个错误的经验了,要保持淡定,它要下载啥我们就帮它下载啥。于是我们进入上面给你们的 github 网址,然后注意图中红框标出来的部分,它提示我们要下载 20151201 版本的,在网址中找到 ippicv/master_20151201,进去找到一个 zip 文件,文件名为
ippicv windows 20151201.zip,把它下载下来即可。当然,如果错误提示中不是这个版本的,就要按照错误提示中的要求下载其他版本。这里附上 20151201 版本的压缩包网盘链接:
http://pan.baidu.com/s/1o8t09ui
注意,这个压缩包要与下述地址内的压缩包替换,也就是 ippicv 所在文件夹
\opencv\sources\3rdparty\ippicv\downloads\windows-04e81ce5d0e329c3fbc606ae32cad44d
到这里,就可以再次回到 CMake-gui 界面点击 Configure 了!还真的成功了!
出现了 Configuring done 字样,说明你的配置完成了,然而上面的框子中是红色的,没有关系,我们再点击一次 Configure。
这回是完全正常了。到这里,OpenCV 的主要模块算是配置完了,下面要把 OpenCV 的额外模块也配置到一块儿来。
配置额外模块,我们就得先把额外模块的源代码拉到自己电脑上来,天真的我直接去 github 网站上 pull 下来了,然后发现不停地出错。纳闷了好久,后来终于知道了解决方法,原来不能直接 pull github 上的 contrib 源代码,要去下载 opencv_contrib 的 release 版本。这里附上下载地址 (这个比较方便,就不放网盘链接了):
https://github.com/opencv/opencv_contrib/releases
选择第一个 3.2.0 zip 版本即可,下载到 OpenCV 文件夹内,并解压到当前文件夹。
回到 CMake-gui 界面,如下图输入进行查找
此时出现了 OPENCV_EXTRA_MODULES_PATH 这个栏目,在 Value 处选择 modules 所在的路径,注意是 opencv_contrib 的 modules,一定要是 modules(modules 其实就是存放 OpenCV 额外模块源代码的地方)。然后点击 Configure 进行配置。结果又有问题出现了。
这回是一个叫 protobuf-cpp-3.1.0.tar.gz 的文件在作怪了,又是哈希值不匹配,又是故伎重演。马上去寻求万能的 CSDN 下载频道,把这个文件给找来了。还是奉上网盘链接:
http://pan.baidu.com/s/1eSGb4o6
将这个压缩包替换下列地址原有的压缩包,无需解压。
\opencv_contrib-3.2.0\ modules\dnn.download\bd5e3eed635a8d32e2b99658633815ef\v3.1.0
也就是错误提示中的地址。 点击 Configure
Oh my god!它竟然顺利地进行下去了!实在是太激动了!这一次的 configuring done 意味着 OpenCV 的主要模块和额外模块已经结合在了一起,最后,让我们点击一下 Configure 右边的 Generate,来生成编译文件。这回速度相当快,而且出现了 Generating done,说明编译工作已经全部完成了!
其实编译工作是已经做完了,CMake 到这里也算是尽职了。这一步也是最后一步,我们的工作就是把 VS 和结合版的 OpenCV 连接起来,这个其实跟 OpenCV 主要模块的设置差不多,玩过 OpenCV 的人应该都会使用。
我们先到存放结合版 OpenCV 的 opencvbuild 文件中找到 OpenCV.sln 文件,这是个解决方案文件,我们将它打开。
右键点击解决方案,点击方框中所示的重新生成解决方案,接着就是漫长的等待。因为里面项目太多,所以生成解决方案要一段时间,差不多 10 分钟吧。
生成成功了 114 个。
如上图所示,点击 CMakeTargets,再右键 INSTALL,点击仅用于项目中的仅生成 INSTALL。到这里我们需要的 lib 都已经生成了,下面就是要把 OpenCV 链接到 VS 上了。首先,我们随便打开一个自己的项目。
点击右边的属性管理器,点击 Debug|x64(这里注意要根据自己的需求选择,看你是常用 debug 还是 release,系统是 32 位还是 64 位),右键 Microsoft.Cpp.x64.user,点击属性。
点击 VC++ 目录,先填写包含目录,如下图填写。
再填写库目录,如下图填写。
最后,点击链接器,点击输入,填写附加依赖项。
附加依赖项中填写内容如下,感谢 cosmispower 博客的提供,我会在下面特别指出
- opencv_aruco320d.libopencv_bgsegm320d.libopencv_bioinspired320d.libopencv_calib3d320d.libopencv_ccalib320d.libopencv_core320d.libopencv_datasets320d.libopencv_dnn320d.libopencv_dpm320d.libopencv_face320d.libopencv_features2d320d.libopencv_flann320d.libopencv_fuzzy320d.libopencv_highgui320d.libopencv_imgcodecs320d.libopencv_imgproc320d.libopencv_line_descriptor320d.libopencv_ml320d.libopencv_objdetect320d.libopencv_optflow320d.libopencv_phase_unwrapping320d.libopencv_photo320d.libopencv_plot320d.libopencv_reg320d.libopencv_rgbd320d.libopencv_saliency320d.libopencv_shape320d.libopencv_stereo320d.libopencv_stitching320d.libopencv_structured_light320d.libopencv_superres320d.libopencv_surface_matching320d.libopencv_text320d.libopencv_tracking320d.libopencv_video320d.libopencv_videoio320d.libopencv_videostab320d.libopencv_xfeatures2d320d.libopencv_ximgproc320d.libopencv_xobjdetect320d.libopencv_xobjdetect320d.lib
将这个复制粘贴过去即可,注意,这些都是 debug 版本的,如果你是 release 版本的,请把每行里面的 d 字母去掉再粘贴。
然后,要设置系统变量,回到桌面,右键点击计算机,点击属性,点击高级系统设置,点击环境变量,在系统变量一栏中找到 Path,在里面添上如下地址,别忘了分号隔开。
D:\OpenCV\opencv_contrib\install\x64\vc14\bin;(这是我的地址,要填自己的)
至此,所有工作都已经完成,大家可以去试试是不是可以使用那些额外模块了。我在这里做几点总结:
1. 玩老外的产品时,遇到错误一定要仔细阅读错误提示,对症下药,而且很多都是因为网络问题造成的,可选择自行下载!
2. 开源库存放代码的网站真的很重要,比如 github,因为上面会有开发者的指导,虽然有时候并不能很好地理解,但是总比独自摸索好!
3. 最后,还得推崇下伟大的 CSDN,大牛多,下载各种资源的首选地!
献上参考资料,并再次感谢以下前辈们的指导! [1]https://github.com/opencv/opencv_contrib "github" [2]http://www.cnblogs.com/Yan47/articles/5967537.html "OpenCV 下使用 CMake" [3]http://blog.csdn.net/cosmispower/article/details/60601151 "opencv3.2+opencv_contrib+cmake"
来源: http://blog.csdn.net/tenkywoo/article/details/70655291