前言:
据官方说法,目前还不是太稳定的算法模块都在opencv_contrib里边,由于不稳定,所以不能在release版本里发行,只有在稳定以后才会放进release里边。但是这里边有很多我们经常要用的算法,比如SIFT,SURF等(在xfeatures2d 模块里边)。官网提供了说明,可以把opencv_contrib扩展模块添加编译到已安装的opencv4.1.0里边,也可以安装的时候直接把扩展模块编译进去一并安装。(写的时候是opencv3.0.0)
1.依赖关系:
注:官方文档中虽然说其中一些依赖包是可选的,但是最好还是都装上,以防出问题。
以上依赖包可用以下命令安装:
[compiler] sudo apt-get install build-essential
[required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
[optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libdc1394-22-dev
2.下载源码:
a.可以从opencv官网直接下载:https://opencv.org/releases/
b.从github上clone
1.cd ~/
2.git clone https://github.com/opencv/opencv.git
3.git clone https://github.com/opencv/opencv_contrib.git
3.CMake Opencv源码:
建立一个编译目录(例如:/build)把cmake后的文件都放在这里边。
1.cd ~/opencv
2.mkdir build
3.cd build
然后开始cmake,这里需要注意几个cmake的参数,比较重要。
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH= ..
注:命令中最后的" … "(空格+两个点)千万不要忘记
其中 CMAKE_BUILD_TYPE=Release / Debug
OPENCV_EXTRA_MODULES_PATH 就是用来指定要编译的扩展模块,后边加上刚下载的opencv_contrib模块的路径即可
我的路径:/home/shining/Opencv/opencv-4.1.0/opencv_contrib
这里我将opencv_contrib移到opencv文件夹,并在opencv文件夹创建build:mkdir build
进入build文件夹进行编译:
cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -D OPENCV_ENABLE_NONFREE=True ..
-D OPENCV_ENABLE_NONFREE = True 这个非常重要,这个是安装opencv专利模块的语句。
4.把代码编译成可执行文件,这里官方推荐使用多进程编译,推荐七个进程:
make -j7 # runs 7 jobs in parallel
5.安装
sudo make install
6.运行测试
进入samples:
编译:cmake .
make
./opencv_example
在编译过程中,出现了两个问题:
/home/shining/opencv-3.4.6/opencv_contrib/modules/xfeatures2d/src/boostdesc.cpp:653:37: fatal error: boostdesc_bgm.i: 没有那个文件或目录
#include “boostdesc_bgm.i”
1.缺少以下几个文件
解决方法:
增加这几个文件
参考;https://answers.opencv.org/question/113942/cmake-failing-with-hash-mismatch/中有相应的
2.后面又出现两次找不到文件的情况,但是不是缺少这个文件,而是include中的文件路径出现错误
------------------------------------------------------------------------------------------------------------------------------------------------------------------
cmake过程中会下载很多需要的文件,没有下载成功也不会报错,所以没注意的话一般就直接执行下一步了,然后make时报错,通常根据make时的提示寻找问题,但其实根源是在cmake时出现的,所以先解决cmake的问题。
参考github上的issue:https://github.com/opencv/opencv_contrib/issues/1131
有网友根据提示Download failed: 1;"unsupported protocol"认为是因为下载出错引起的,所用的cmake版本没有支持HTTPS,于是重新安装了cmake
tar -zxvf cmake-3.14.4.tar.gz
cd cmake-3.14.4
sudo apt-get install libcurl4-gnutls-dev
sudo apt-get install zlib1g-dev
./bootstrap --system-curl
sudo make && sudo make install
安装完之后然后重新cmake,cmake两遍看出现的问题2(第一遍出错时信息太多,没显示出错的地方,cmake第二遍)
(安装支持HTTPS的cmake不是直接解决问题,而是可以更清楚地看问题的根源)
https://github.com/opencv/opencv_contrib/issues/1131