概述:
在opencv3版本中,将特征点提取的相关算法从opencv2的feature2d中搬移到了opencv-contrib模块中的xfeature2d模块中.如果需要使用这部分功能,需要编译opencv源码和opencv-contrib模块.
添加opencv_contrib模块的具体步骤:
1.安装cmake工具 www.cmake.rog
2.在github下载opencv-contrib模块源码.https://github.com/opencv/opencv_contrib/releases
这部分需要注意,下载和opencv源码相同版本的opencv-contrib模块.
具体操作如下:
- 进入opencv_contrib仓库
- 点击releases,查找已经发行的历史版本.
- 由于我自己使用的opencv3.4.6,因此选择3.4.6版本的contrib模块.
3.将opencv-contrib模块解压.
4.新建build文件夹,用于存放cmake的编译输出二进制文件.
5.找到cmake安装目录,运行cmake-gui.exe,进行cmake工程的配置和生成.
操作如下:
- 选择opencv源码目录与生成二进制文件的存放目录
- 第一次configure.点击configure会要求选择vs的版本,系统自动识别,点击确认即可.
- 第二次configure.这一步需要注意两点:
- 选中opencv-contrib模块作为外部模块.精确到该目录下的moudle目录.
- 选中OPENCV_ENABLE_NONEFREE标号,因为有些模块已经申请了专利.存在版权问题.
- 电机generate生成工程文件,生成之后,找到build目录,通过vs2017打开opencv.sln解决方案.
6.在vs2017中,直接F5编译opencv.
7.在编译成功后,右键点击INSTALL,再点击生成.这一步操作将在build目录下生成install文件夹.
install文件夹中便是我们熟悉的用于opencv配置的文件内容.
8.按照opencv配置步骤,配置新编译的opencv.
9.配置之后,在代码中使用xfreature2d的相关功能时,需要包含头文件和引用命名空间.
10.逐一完成以上步骤,便能够使用surf等算法.这里放上surf算法运行结果.
注意:
1.在cmake阶段,如果使用sift等算法,需要勾选OPENCV_ENABLE_NONEFREE.否则将报错,如下:
OpenCV(3.4.6) Error: The function/feature is not implemented (This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library) in cv::xfeatures2d::SURF::create, file D:\Myopencv\opencvContrib\opencv_contrib-3.4.6\modules\xfeatures2d\src\surf.cpp, line 1029
其中,错误提示告诉我们在cmake编译选项中,需要勾选OPENCV_ENABLE_NONFREE选项,并重新编译库文件.
2.最好保证opencv源码和opencv-contrib模块的版本一致.