OpenCV的安装经验(Linux)

OpenCV的安装经验

OpenCV是计算机视觉最常用的库了,本身很大,而很多linux发行版上会自带OpenCV的软件包,这导致了大家在安装时经常会碰到多版本共存的问题。在此我总结了我使用OpenCV的方法套路,使用此方法安装、导入工程可以灵活地选择自己要安装的版本。


安装

首先当然是去官网下载源码安装包。地址如下

http://opencv.org/releases.html

似乎3.x的版本和2.4版本的接口变化挺大。等有时间了再去仔细研究吧。

本文推荐,安装目录和源码在一个目录下,以避免污染系统的/usr。具体命令如下:

unzip opencv-2.4.13.3.zip
cd opencv-2.4.13.3
mkdir build destdir
cd build
cmake ..
make
make install DESTDIR =../destdir/

解释

如命令所示,在源码根目录下创建了一个编译项目的build目录,同时创建了一个存放项目位置的destdir目录。我当前的源码目录如下所示(比较久远有多个自建的目录):
这里写图片描述
图中共有四个新建的目录dist是最初安装的版本。dist_withgtk是后来编程需要加上gtk编译的版本。而distdir是为了写本文而构建的目录。
注意

make install DESTDIR =../destdir/

此命令的DESTDIR后的参数定义了需要安装的位置。而项目安装在此目录后,项目脚本会自动创建标准unix的代码与库架构并将项目安装进去:
OpenCV的安装经验(Linux)_第1张图片
由此推测安装脚本的默认值应该是系统根目录。而直接安装,会为以后卸载,更新带来很多麻烦(更新。。。没试过)。所以通常我建议自己定制它。


使用

以上就是项目安装的方法。而安装了以后,该如何使用自己编译好的版本呢?这就要谈到cmake了。通常我们使用OpenCV都是在使用cmake构建的工程下。而一般网上博客的教程都是如下代码:

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(exec sources)
target_link_libraries(exec ${OpenCV_LIBS} )

其实本文提出的方法区别不大,就是在find_package前加上

set(OpenCV_DIR "/home/xdeddy/Desktop/deplib/opencv-3.2.0/destdir/usr/local/share/OpenCV")

注意路径中/home/xdeddy/Desktop/deplib/opencv-3.2.0/destdir就是编译后的文件安装的根目录,就是上文DESTDIR指定的位置,根据实际情况修改即可。且后面的/usr/local/share/OpenCV必须加上,这是固定不变的。


总结与讨论

  • 本文推荐的方法很简单,核心就是在安装时指定make install后的DESTDIR参数,在使用时指定cmakeOpenCV_DIR变量。
  • 至于为何指定的是cmakeOpenCV_DIR变量,是因为,该变量指定了一个cmake的配置文件存放的地址。OpenCV算是一个非常非常标准的cmake工程库了,所以它非常完善地采用了cmake的这个特性。大家可以在上文的目录里找到OpenCVConfig.cmake这个配置文件。这是一个cmake工程的标准配置文件,指定了本库的头文件、库文件的安装位置,并设置了相关变量。各发行版自带的安装包自带了OpenCVConfig.cmake这个配置文件。且OpenCV_DIR变量也默认会指向相应路径,所以我们在apt-get install后才可以安逸地通过find_package(OpenCV REQUIRED)去使用自带版本的库。同时用OpenCV_INCLUDE_DIRSOpenCV_LIBS去指定头文件地址,链接的库文件。
  • 后期我会再次总结cmake在大项目中的常用套路。
  • 感觉OpenCV官方提供的cmake脚本应该支持更优雅的方法以实现多版本共存、卸载等机制,如果有哪位读者有所了解欢迎指教!

你可能感兴趣的:(CV)