再谈OpenCV Contrib编译与安装

Jun 4,2019   2228 words   8 min


在之前其实已经谈了很多关于如何搭建OpenCV环境的博客了,对于Python环境,如果安装普通版本,见这篇博客;如果需要安装Contrib版本,见这篇博客。 对于C++版本的OpenCV,参考这篇博客。 这篇博客主要介绍C++的Contrib版本的OpenCV安装。

1.下载源码

既然是Contrib版本,因此下载的源码包括两部分:OpenCVOpenCV Contrib,分别点击去Github下载即可。 在各自的项目主页里点击”Releases”,如下。 选择需要的版本,下载Source Code即可。唯一需要注意的是OpenCV的代码要和Contrib的代码版本保持一致,否则会出错。

2.配置代码

下载好代码后,将两个压缩文件分别解压,并且将解压后的Contrib的文件整体放到OpenCV目录下,如下所示。 然后在OpenCV文件夹下建个build的文件夹用于存放生成的一些文件。这样,相关文件配置就完成了。

3.配置CMake

这一步推荐用CMake的GUI做,这样更加直观一些,当然如果你是高手,直接在终端中输入参数也不是不可以。在终端中输入cmake-gui即可打开CMake界面,如下。 在”Where is the source code”里选择OpenCV目录,在”Where to build the binaries”选择刚刚我们建立的build目录。 因为这里需要编译的是Contrib,因此还需要修改一些变量,如果普通安装的话那么这里不需要修改任何参数,直接Configure然后Generate就可以了。 需要修改的参数主要有以下几个:

(1)OPENCV_EXTRA_MODULES_PATH

这个参数指定的是额外模块的路径,指定了之后CMake就会自动寻找是否有额外模块。需要注意的是路径是contrib目录下的modules,例如/root/softwares/opencv-3.4.6/opencv_contrib-3.4.6/modules,而不能只写到/root/softwares/opencv-3.4.6/opencv_contrib-3.4.6,会提示找不到模块。

(2)OPENCV_ENABLE_NONFREE

这个参数的作用是启用OpenCV中的非免费模块,如果你想使用SIFT、SURF等算法,则必须要开启,否则等你调用它们的时候会提示它们是非免费模块,没有启用。

以上便是两个使用Contrib模块必须要修改的参数,其它没有特殊要求默认即可。配置好后,点击”Configure”按钮,CMake即开始配置,不出意外的话会会下载一些文件,这些文件都是外网的,还比较大,因此经常失败。 一般有两个文件比较难下,一个是face_landmark_model.dat 所以建议提前下好,然后放到指定目录下。首先这个文件下载地址在这里,手动下载好之后,找到opencv-3.4.6/opencv_contrib-3.4.6/modules/face下面的CMakeLists.txt文件并打开。 找到其中以”https”开头的一串网址,如下。 将其替换成你下载好的文件路径,如下。 另一个比较难下的是以”IPP开头的一个文件”,同理,打开opencv/3rdparty/ippicv/ippicv.cmake文件,找到其中如下内容。 将其替换成你下载好的文件路径即可,如下。 这样基本就不会再出问题了,如下显示”Configuring done”。 再点击”Generate”就可以完成CMake配置了。

4.编译代码

在新建的build文件夹里打开终端,直接输入make就可以,至于用几个线程看你的电脑配置,我在虚拟机上用两个线程make -j2,之前在树莓派上编译的时候只能用一个线程。 然后就是漫长的等待了,如下图。 同时这一步也是最不确定的一步,一些莫名其妙的问题都是在这一步出现的,有时候确实很随缘。遇到问题多多百度,只能祝你好运了。在下面的参考资料中也说到了一些问题可以参考。 如果顺利到100%,恭喜,编译完成了。

5.安装代码

在完成make之后,直接make install即可将相关头文件拷贝到系统中去,之后就可以调用了。 make install以后,源文件不建议删除,因为如果以后还需要卸载的话,直接在build目录下打开终端输入make uninstall即可,否则的话只能手动删除目录文件了。

6.参考资料

  • [1]https://blog.csdn.net/u010739369/article/details/79966263
  • [2]https://blog.csdn.net/CSDN330/article/details/86747867
  • [3]https://www.cnblogs.com/needybeerlxy/p/8979238.html
  • [4]https://blog.csdn.net/zxj_yantai/article/details/78779880
  • [5]https://blog.csdn.net/u011361393/article/details/83210824
  • [6]https://www.cnblogs.com/leoking01/p/8306935.html

本文作者原创,未经许可不得转载,谢谢配合

返回顶部