这篇博客主要总结下在Ubuntu下安装opencv以及扩展库所遇到的问题,以及解决的方案。

Opencv版本:3.4.7+CUDA9.0+1060

一、下载Opencv+contrib

  • 在Opencv官网中下载opencv+opencv_contrib源码,网站:OpenCV · GitHub

  • 选择releases

  • 下载相应的版本的source code(zip)

  • 同样的方式下载opencv_contrib
  • 下载后的两个压缩包

二、安装依赖

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install ffmpeg

安装openblas-dev,见问题11

sudo apt-get install libopenblas-dev

三、cmake

  • cmake的安装

注意:我在安装opencv3.4.7时,遇到cmake以及cmake-gui版本过低问题,造成无法兼容c++11标准,cmake以及gui的安装、解决办法详见问题4

  • 启动cmake-gui,终端输入如下命令:
cmake-gui

  • 将opencv-contrib文件夹复制到openc文件夹中,命名为opencv_contrib,再新建一个build文件夹

  • 在cmake-gui中选择source code、build路径
  • source code:/home/xxx/ThreePartyLib/opencv-3.4.7
  • build:/home/xxx/ThreePartyLib/opencv-3.4.7/build
  • 点击Configure选择Unix Makefiles,其余默认,点击finish

注意:这里容易因为网络的原因无法下载IPPICV 包、face_landmark_model.dat,所以建议提前手动下载下来,手动下载方法参考问题2,3

  • Configure完成

  • 需要修改的地方

(1)、在CMAKE_BUILD_TYPE 值处输入RELEASE,其他保持不变(如果已经存在就不必修改)。

(2)、在OPENCV_EXTRA_MODULES_PATH处,选择输入目录(单击这一行后方空白处即可选中),接着选择opencv_contrib文件夹中的modules文件夹。


(3)、在ENABLE_CXX11后面打√。

Opencv3.4.7版本里包含了很多C++11标准,如果没选上会在make阶段报错参考问题8

(4)、如果需要cuda,在WITH_CUDA打√

(5)、在BUILD_opencv_world后面打√。

(这个√可以打上,也可以不用,如果选中表示可以只生成一个库我在编译的后面去掉了这个,因为它造成和已有的一些包的冲突)

(6)、如果需要使用特征点检测算法,比如SIFT,在opencv_nonfree后面打√。

  • sudo make

注意:建议sudo make,当然make也可以,这里可以因为权限问题造成终止。

  • sudo make install

  • 查询opencv版本
pkg-config --modversion opencv 


四、环境配置

  • 打开文件
sudo gedit /etc/ld.so.conf.d/opencv.conf
  • 添加内容
/usr/local/lib
  • 终端运行
sudo ldconfig
  • 添加环境变量(这里有些博客添加在/etc/profile、/etc/bash.bahsrc、~/.profile,具体区别见注)
sudo gedit ~/.bashrc
  • 添加
#opencv
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
  • 更新环境变量
source ~/.bashrc

注:

/etc/ld.so.conf 此文件记录了编译时使用的动态库的路径,也就是加载so库的路径。

  • 默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,而通常通过源码包进行安装时,如果不指定--prefix会将库安装在/usr/local目录下,而又没有在文件/etc/ld.so.conf中添加/usr/local/lib这个目录。这样虽然安装了源码包,但是使用时仍然找不到相关的.so库,就会报错。也就是说系统不知道安装了源码包。
  • 对于此种情况有2种解决办法:
  1. 在用源码安装时,用--prefix指定安装路径为/usr/lib。这样的话也就不用配置PKG_CONFIG_PATH
  2. 直接将路径/usr/local/lib路径加入到文件/etc/ld.so.conf文件的中。在文件/etc/ld.so.conf中末尾直接添加:/usr/local/lib(这个方法给力!)

参考:/etc/ld.so.conf详解 - 阳台 - 博客园

ldconfig

  • ldconfig这个程序,位于/sbin下,它的作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新的搜索路径,需要运行一下ldconfig,使所有的库文件都被缓存到文件/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。
  • PKG_CONFIG_PATH:环境变量,它是在安装了pkg-config后出现的其实pkg-config就是向configure程序提供系统信息的程序,比如软件的版本啦,库的版本啦,库的路径啦,等等。这些信息只是在编译其间使用。

/etc/profile、/etc/bash.bahsrc、~/.profile、~/.bashrc

  • 这些文件都有环境变量的设定的作用
  • 打开一个新的shell(包括打开一个新终端和在终端上输入bash),都会重新读取/etc/bash.bashrc 和 ~/.bashrc文件里面的内容。

  • Linux启动登录时会读取/etc/profile和~/.profile文件的内容。所以,重启登录时会读取/etc/profile和~/.profile文件的内容(此时并不读取/etc/bash.bashrc和~/.bashrc文件)。然后再打开终端时,会去读取/etc/bash.bashrc和 ~/.bashrc文件。这就出现了那种结果。

参考:详解/etc/profile、/etc/bash.bahsrc、~/.profile、~/.bashrc的用途_jirryzhang的博客-CSDN博客

问题:

1.No package 'libavresample' found

解决办法:

sudo apt-get install libavresample-dev

2.opencv IPPICV 下载不下来的问题解决

解决办法:

  • 首先确定IPPICV版本,可以查看自己编译时的cmake信息,或者查看报错后的cmakedownloadlog.txt,找到下载地址。

  • 到github中opencv厂库找到对应的版本下载下来。

opencv_3rdparty/ippicv at ippicv/master_20180723 · opencv/opencv_3rdparty · GitHub

  • /opencv-[版本号]/3rdparty/ippicvippicv.cmake中找到,如图所示
set(THE_ROOT "${OpenCV_BINARY_DIR}/3rdparty/ippicv")

  • 将这一行以后的命令(上图有颜色的部分),替换为:
set(OPENCV_ICV_UNPACK_PATH "${CMAKE_CURRENT_LIST_DIR}/unpack")set(OPENCV_ICV_PATH "${OPENCV_ICV_UNPACK_PATH}${OPENCV_ICV_PACKAGE_SUBDIR}")message(STATUS "ICV: Package successfully downloaded")set(OPENCV_ICV_PATH "${OPENCV_ICV_PATH}" PARENT_SCOPE)
endfunction()
  • 替换后为:

  • 在同一级目录中(也就是/opencv-[版本号]/3rdparty/ippicv/)建立unpack文件夹,把下载下来的ippicv包解压出的内容放进unpack文件夹即可;

  • 重新编译

3.face_landmark_model.dat下载不下来的问题解决

和上面一样,去cmakedownloadlog.txt,找到文件的地址然后进行下载,我的地址为:https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat

下载好后,修改配置文件

$ gedit /home/usrname/tool/opencv-3.4.0/opencv_contrib-3.4.0/modules/face/CMakeLists.txt
#usrname 换成自己的用户名, <tool/opencv-3.4.0>换成自己opencv源码对应的文件夹

将CMakeLists.txt文件的第19行修改为本地路径,即将原来的网址修改为下载的文件保存的路径

"file:///home/usrname/install/"
#"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}/"
# usrname记得替换为自己的用户名,路径记得替换为自己文件对应的路径

/home/usrname/install/这个文件地址根据你文件放的地址设置。

4.target_compile_features specified unknown feature cxx_std_11 for target...

  • 原因:cmake版本太低的原因,故需重编cmake.
  • 网址:Download | CMake
  • 解决办法:
tar xvf  cmake-3.15.0.tar.gz./configuremake && make install 
  • 升级cmake-gui将上诉命令改为
./configure --qt-gui
  • 检查版本
cmake --version
cmake-gui --version

  • CMake Error :Could NOT find OpenSSL
sudo apt-get install libssl-dev

5.对‘ZSTD_createDStream’未定义的引用

  • 问题:和anaconda发生冲突
  • 解决办法:把anaconda的环境变量去掉就可以了,然后删除build中的文件以及/usr/local/lib下面的libopencvxxx文件,重新cmake、make

6.fatal error: Eigen/Core: No such file or directory

  • 解决办法:
sudo ln -sf eigen3/Eigen Eigen
sudo ln -sf eigen3/unsupported unsupported

7./usr/bin/ld: /usr/local/lib/libgflags.a(gflags.cc.o):relocation R_X86_64_32S against

  • 解决办法:(gflags是使用源码安装)

进入gflags/build中,找到CMakeCache.txt,改为CMAKE_CXX_FLAGS:STRING=-fPIC

export CXXFLAGS="-fPIC" && cmake .. && make VERBOSE=1
make && make install

8.error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options

  • 解决办法:勾选上c++11,重新make.

9.fatal error: opencv2/xfeatures2d/cuda.hpp: No such file or directory

问题描述:

解决办法:修改stitching文件夹下的cmakelist.txt

添加:INCLUDE_DIRECTORIES("/home/robot/software/opencv-3.4.13/opencv_contrib/modules/xfeatures2d/include")

注意:需要改成自己的路径,而且添加的位置也有影响

10.c->flags |= CODEC_FLAG_GLOBAL_HEADER;

问题描述:

解决办法:

在opencv-3.3.1/modules/videoio/src/cap_ffmpeg_impl.hpp下添加:

#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020

然后重新执行:

make -j5

11.‘cblas_sgemm’未定义的引用问题

问题描述:缺少openblas库

重新cmake,出现如下提示信息:

-- Could not find OpenBLAS include. Turning OpenBLAS_FOUND off
-- Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off

解决办法:

sudo apt-get install libopenblas-dev

参考链接:

https://blog.csdn.net/echoamor/article/details/83022352 https://blog.csdn.net/echoamor/article/details/83022352

在ubuntu16.04下安装opencv3.4.2_skyloveyue的专栏-CSDN博客https://blog.csdn.net/skyloveyue/article/details/81703173

ubuntu16.04 安装opencv IPPICV 和 face_landmark_model.dat下载不下来的问题解决_CSDN330的博客-CSDN博客https://blog.csdn.net/CSDN330/article/details/86747867

安装caffe遇到/usr/bin/ld: /usr/local/lib/libgflags.a(gflags.cc.o):relocation R_X86_64_32S against_weixin_44003563的博客-CSDN博客https://blog.csdn.net/weixin_44003563/article/details/103612472

(亲测可行)ubuntu16.04+Opencv3.4.3+opencv_contrib3.4.3安装编译全过程_Mr.Andy的博客-CSDN博客https://blog.csdn.net/u014709760/article/details/87704428

[亲测可行]Ubuntu16.04+opencv3.4+opencv_contrib+cuda9.0安装相关推荐

  1. 【亲测】Ubuntu16.04手动安装nvidia显卡驱动+CUDA 8.0--Acer E5-572G版

    前言 前段时间,配置实验室新服务器上的Tesla P4,结果一直有问题,最后终于解决之后.昨天晚上想在自己的笔记本上安装pytorch,sudo apt-get update的时候,结果提示系统缺少一 ...

  2. (亲测可行)ubuntu16.04+Opencv3.4.3+opencv_contrib3.4.3安装编译全过程

    ubuntu16.04+Opencv3.4.3+Opencv_contrib3.4.3安装编译全过程 1.资源下载 opencv3.4.3+opencv_contrib3.4.3下载链接: https ...

  3. win10双磁盘安装ubuntu16.04双系统 GTX1660Ti+UEFI+GPT 亲测可行

    有独显的笔记本在安装ubuntu系统的时候都会比较折腾,网上教程多且繁杂,每次安装都会遇到不同的问题,很多教程上会经常遇到卡在ubuntu的logo界面不动的情况,我就没有遇到,所以这件事情还是按照自 ...

  4. Ubuntu18.04安装ROS最后的rosdep update不成功解决方案(亲测可行)

    Ubuntu18.04安装ROS最后的rosdep update不成功解决方案(亲测可行) 问题描述 很多人在安装ROS时会卡在最后一步rosdep update上面,虽然这一步不成功并不影响小海龟的 ...

  5. Windows下命令行及Java+Tesseract-OCR对图像进行(字母+数字+中文)识别,亲测可行

    Windows下Java+Tesseract-OCR对图像进行字符识别,亲测可行 1. 下载tesseract-ocr.中文语言包并安装 2. 命令行对图片进行识别及效果图 3. Java调用Tess ...

  6. vegas pro 15解决导入的视频和音频有噪声问题,亲测可行

    vegas pro 15解决导入的视频和音频有噪声问题,亲测可行 参考文章: (1)vegas pro 15解决导入的视频和音频有噪声问题,亲测可行 (2)https://www.cnblogs.co ...

  7. python程序打包成exe可执行文件,亲测可行(pyinstaller教程)

    python程序打包成exe可执行文件,亲测可行(pyinstaller教程)(11-20190214) 文章目录: 有些程序你不想让别人看到,由此程序你想做成绿色软件普惠大众,有些..., 然而你只 ...

  8. win10 安装 SqlServer2008 亲测可行

    目录 准备: 开工: 总结: 准备: 网盘链接: 链接:https://pan.baidu.com/s/11Uc2alorjsAkEj1t0dxY3g  提取码:40bq  复制这段内容后打开百度网盘 ...

  9. ThinkBook 14P 15P 笔记本结束休眠后触控板手势失效问题解决 亲测可行

    ThinkBook 14P 15P 笔记本结束休眠后触控板手势失效问题解决 亲测可行 发现这个问题以后在网上搜了很多,基本网上现有的方案无法彻底解决:比如重启.注销:我也咨询了联想官方客服,结果他们让 ...

最新文章

  1. 像我这种垃圾学校出来的人...【原话,不是我编的】
  2. php文本域输出_PHP转换文本框内容为HTML格式的方法
  3. centos6.9配置LAMT页面500错误解决
  4. python退出帮助系统help应该使用exit_Python终极教程(Windows)
  5. 快打开《来自艾泽拉斯的一封密码信》,破译网易重大机密
  6. springmvc dao怎么可以不写实现类_SpringMVC(一)细聊ContextLoaderListener 是怎么被加载的...
  7. SpringMVC路径匹配规则AntPathMatcher(转)
  8. [转载] WSDL2Java详细使用说明【官方最全说明】
  9. ideal如何快速导入import_Vue性能优化:如何实现延迟加载和代码拆分?
  10. Fitts’ Law / 菲茨定律
  11. PHP cookie和session的分析
  12. vtk 实现mimics软件中的Split/Merge算法
  13. 近邻成分分析(NCA)算法
  14. Spring AOP 术语
  15. 远程桌面用户输入法的配置
  16. 哈工大的计算机科学与技术三个校区区别,哈尔滨工业大学计算学部研招拟录三地比较,深圳校区初试分数最高...
  17. 30. 串联所有单词的子串
  18. 深信服2020校招前端一面面经
  19. 01-学习笔记(webstorm自定义模板代码)【新手上路,多多关照】
  20. 缩写(二)——IT领域缩写词的发音

热门文章

  1. C语言二分查找代码及解析
  2. 程序员男友“嫌”我收入低,劝我转行互联网,我该听他的吗?
  3. 破解获取wifi密码
  4. 金蝶BOS,界面区域按钮增加权限控制
  5. 消息提示类控件使用之Toast(吐司)的简单使用
  6. 算算新税率比老费率少扣多少钱 --- 2018年10月1日 新的税收费率改革
  7. Datawhale零基础入门NLP day5/Task5基于深度学习的文本分类2
  8. nginx 上传文件大小限制
  9. CC2530微控制器与IAR开发环境
  10. Android样式之view animation