利用CMake编译OpenCV

最近需要自己编译OpenCV主要有两个出发点:

  • 想用OpenCV调用Kinect摄像头,发现需要OpenCV支持OpenNI;
  • 目前的SIFT,SURF算法都从OpenCV源码中移除,放到了opencv_contrib里面,需要一起编译才可以;
  • 希望OpenCV支持C++11特性。

基于以上目的,开始利用CMake编译OpenCV。

系统要求

  • opencv-3.4.5源码
  • opencv_contrib-3.4.5源码
  • openni库
  • cmake-gui

文件夹结构

本次编译创建的文件夹结构如下:

1
2
3
4
5
└──opencv 根文件夹
├── src
│ ├── opencv-3.4.5 解压后的opencv源码
│ └── opencv_contrib-3.4.5 解压后的opencv_contrib源码
└── build 创建一个build空文件夹,放置编译的文件

配置及编译

CMake GUI初配置

  1. 打开cmake-gui软件,点击Browse Source...,选择opencv/src/opencv-3.4.5文件夹,点击确定;
  2. 点击Browse Build,选择opencv/build文件夹,点击确定;
  3. 点击Configure,等待初次配置完成

配置CMake选项

  1. 启用C++11特性,在cmake-gui中查找ENABLE_CXX11,启用;
  2. 配置opencv_contrib,查找OPENCV_EXTRA_MODULES_PATH,设置值为/path/to/opencv/src/opencv_contrib-3.4.5/modules,随后查找OPENCV_ENABLE_NONFREE,启用;
  3. 支持OPENNI,查找WITH_OPENNI以及WITH_OPENNI2,根据需要启用;

生成

多点击几次Configure,直到没有错误提示,若提示找不到openni之类的,就是库没装好。随后点击Generate,便在build文件夹下生成对应的工程文件

编译

根据不同的工程文件采用对应的编译方式编译即可,在Linux下生成的Makefile,可以直接make编译,然后make install安装即可。