UBUNTU安装opencv 3.4.3并且使用SIFT特征和viz

写作意图

换了新电脑,需要重新配置一下opencv3,在使用SIFT特征和viz(用于高翔SLAM14讲中的VO可视化)时遇到了点问题,问题不难解决,但因为编译一次opencv也挺久的,如果能提前注意到这些问题,避免重新编译,就能省下不少时间。
NOTE: 本文主要介绍安装要点,不详细列出整个安装流程。如果需要具体的安装流程可以参考相关/参考链接

opencv安装流程梳理

授之以鱼不如授人以渔,下面梳理一下opencv的安装过程,万变不离其宗。
opencv是用cmake来管理工程,那它的编译方法就跟一般的cmake工程编译步骤一样:

  • 下载opencv源码到home文件夹下

  • cmake ../#为了产生make用的makefile文件

  • make #编译,注意:编译后opencv还只是在home文件夹下

  • sudo make install #把opencv相关文件安装(拷贝)到系统默认目录中,这样在cmake中就可以通过find_package(opencv)找到opencv了。

  • 添加opencv头文件和库的路径到环境变量中,目的是为了让编译器编译时能找得到opencv。也可以不添加,而在cmake里随用随添加。

  • 但是由于opencv也用到了其他的开源库,所以你还需要事先安装其他开源库
    所以添加一步
    sudo apt install 【各种Opencv需要的依赖】

  • 进一步地,考虑到opencv很大,有很多可选项,比如你要不要支持python,matlab等等,所以再加一步 在cmake时后面加上各种可选项,如
    $cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

  • 再进一步,我觉得在cmake时后面加上各种可选项时很不直观,首先,我怎么知道有哪些可选项?其次,我怎么知道我当前的默认选项是什么?有没有一种直观的方法进行可选项的配置?有的,那就是可视化的cmake,即cmake-gui,这个需要事先安装
    sudo apt-get install cmake cmake-qt-gui

综上所述,那么最终的安装步骤看起来应该像这样:

  • sudo apt-get install cmake cmake-qt-gui
  • sudo apt install 【各种Opencv需要的依赖,具体的参考我给出的相关链接】
  • 下载opencv源码到home文件夹下
  • cmake-gui # 运行该指令会弹出cmake界面,可视化的界面可以非常方便的配置各种选型,然后用cmake产生make用的makefile文件
  • make #make后opencv还只是在home文件夹下
  • make install #把opencv相关文件安装(拷贝)到系统目录中。
  • 添加opencv头文件和库的路径到环境变量中,目的是为了让编译器编译时能找得到opencv

开始安装

  1. sudo apt-get install cmake cmake-qt-gui

  2. sudo apt install 【各种Opencv需要的依赖,具体的参考我给出的相关链接
    上面两步参考相关/参考链接

  3. 下载opencv源码到home文件夹下 下载opencv源码到home文件夹下
    给出下载地址
    opencv
    opencv_contrib
    下载完后将opencv_contrib复制到opencv,与已存在的目录进行合并。

  4. cmake #在cmake时后面加上各种可选项,产生make用的makefile文件
    这里用可视化的cmake,在终端输入 $cmake-gui
    UBUNTU安装opencv 3.4.3并且使用SIFT特征和viz_第1张图片
    在cmake配置过程中会下载个face的模型文件,由于墙的原因,它会下载非常久最后显示下载超时,很浪费时间,由于我用不到这个模型,所以去掉勾选:
    UBUNTU安装opencv 3.4.3并且使用SIFT特征和viz_第2张图片
    为了能使用sift,使能nonfree(为什么是nonfree?因为sift拿来商用不是免费的 - -):
    在这里插入图片描述
    为了使用viz,确保勾选了WITH_VTK并且能找得到VTK目录:
    UBUNTU安装opencv 3.4.3并且使用SIFT特征和viz_第3张图片
    如果你的VTK_DIR显示找不到目录,你需要先安装一下依赖项$sudo apt-get install libvtk5-dev,然后再一次configure。
    configure完成后点一下Generate。

  5. make #make后opencv还只是在home文件夹下

  6. make install #把opencv相关文件安装(拷贝)到系统目录中。

  7. 添加opencv头文件和库的路径到环境变量中,目的是为了让编译器编译时能找得到opencv。
    参考:https://blog.csdn.net/cocoaqin/article/details/78163171

以上,就是个人总结,目的是给自己日后参考,或让新人少走些弯路。如果有错请指出,我会及时修改,感谢

本人机器开发环境

  • ubuntu 16.04

编译或使用opencv时可能遇到的问题

  • error: (-213:The function/feature is not implemented)
    解决办法:这个是我在调用sift特征时产生的错误,因为我cmake时编译了opencv_contrib但却没使能nonfree(sift商用不是免费的,所以包含在nonfree中),导致相关的函数没有编译,而sift需要用到nonfree里的函数,所以出错。

  • viz的错误: fatal error: opencv2/viz.hpp: No such file or directory
    解决办法:出错原因是编译cmake之前没有安装vtk,$sudo apt-get install libvtk5-dev安装后再次编译opencv

  • 使用imshow时,报错如下

terminate called after throwing an instance of 'cv::Exception'
 what():  OpenCV(4.2.0) /home/chrome/ThridLibs/opencv-4.2.0/modules/highgui/src/window.cpp:651: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage'

解决办法:原因是编译cmake之前没有安装libgtk2.0-dev pkg-config,sudo apt install libgtk2.0-dev pkg-config,然后重新编译一次opencv。

  • 问题:
[ 19%] Linking CXX executable ../../../bin/opencv_test_cudev
/usr/bin/ld: warning: libzstd.so.1.3.7, needed by //home/lb-sz/anaconda3/lib/libtiff.so.5, not found (try using -rpath or -rpath-link)
//home/lb-sz/anaconda3/lib/libtiff.so.5:对‘ZSTD_initCStream’未定义的引用

解决办法: 这是由于anaconda自带了许多库, opencv部分源码在编译链接时, 本应使用系统目录下的库文件,却意外的使用anaconda自带的库. 我们可以暂时先把anaconda环境变量去掉, 方法就是注释掉~/.bashrc里anaconda相关的部分, 保存文件后重新打开一个终端, 输入 $echo $PATH 查看若没有anaconda相关字样, 则重新编译即可.
另一个办法: 把anaconda这个文件夹改名,让系统找不到anaconda,这样它就会从其他地方找所需库了.

相关/参考链接

ubuntu16.04安装opencv3.4.1教程
Ubuntu 16.04 安装opencv3及其扩展模块

你可能感兴趣的:(Opencv)