【OpenCV】编译opencv_contrib模块

opencv从2.x到3.x源码结构变动非常大,很多功能不完善、性能不稳定或测试不完全的模块,都被放在了extra_modules(opencv_contrib)里面。官方给出的解释是:所有新模块都应单独开发,并首先在opencv_contrib中发布 ,当模块成熟并获得普及时,再将其移至opencv主库中,这时开发团队也将为该模块提供后续支持。

最近要用到一些特征点检测算法,3.0以后这些算法都移到了xfeacture2d模块中,下面记录一下编译过程。


1. 编译OpenCV

下载源码,按照常规思路编译即可,基本步骤:

  • cmake设置opencv源码目录、编译目录及安装目录(CMAKE_INSTALL_PREFIX);
  • “Configure”->“Generate”,选择编译器;
  • 编译源码。

在这里插入图片描述

2. 编译opencv_contrib模块

(1)下载并解压opencv_contrib源码:
【OpenCV】编译opencv_contrib模块_第1张图片

(2)在opencv的cmake中设置OPENCV_EXTRA_MODULES_PATH为opencv_contrib源码路径:

在这里插入图片描述
(3)“Configure”后选择需要编译的模块:

“Configure”后会出现opencv_contrib中模块的编译选项,选择需要编译的模块,并点击Configure和Generate。我这里编译了xfeatures2d模块,把他勾上:

【OpenCV】编译opencv_contrib模块_第2张图片
(4)编译

Generate完后打开工程直接编译即可。

3. 常见错误处理

3.1 找不到文件

报错:无法打开包括文件:“vgg_generated_120.i”:No such file or directory。

在这里插入图片描述
可以直接下载这些文件放到对应目录(xx/opencv_contrib-3.x.x/modules/xfeatures2d/src)即可,这里给出地址:

  • boostdesc_lbgm.i
  • boostdesc_bgm.i
  • boostdesc_bgm_bi.i
  • boostdesc_bgm_hd.i
  • boostdesc_binboost_064.i
  • boostdesc_binboost_128.i
  • boostdesc_binboost_256.i
  • vgg_generated_48.i
  • vgg_generated_64.i
  • vgg_generated_80.i
  • vgg_generated_120.i

3.2 无法引用头文件

编译时会出现一些错误,编译xfeatures2d模块时下面的4个文件会出错,都是头文件引用路径出现问题,最简单的解决方案是把它改成绝对路径,不嫌麻烦的话也可以把这些头文件复制到工程include目录下或把头文件路径添加到CMakeLists.txt中。
在这里插入图片描述
在这里插入图片描述
【OpenCV】编译opencv_contrib模块_第3张图片
在这里插入图片描述
在这里插入图片描述

你可能感兴趣的:(opencv,sift,contrib)