自己搭建各种开源视觉环境时都需要在linux下安装opencv,除却window,只linux下安装opencv来来回回也有七八次了吧。一直觉得这种搭建环境的简单基础操作没必要写博客,不过考虑到偶尔出现的小问题,还是做个记录吧!方便下次再搭建新环境时直接找到答案,毕竟时过境迁,容易忘掉一些问题点!
一、源码下载
opencv官网或着github下载源码包opencv-3.4和附加包opencv_contrib-3.4(注意精确的版本号对应正确)
opencv3.4源码地址
opencv_contrib-3.4附加包源码地址
我目前下载到的最新的是3.4.8
解压到自己想要的指定目录下
注意:opencv2版本源码安装,不需要下载opencv_contrib附加包
二、cmake生成makefile文件
相关操作指令如下:
cd opencv-3.4mkdir buildcd build
//下面是我跟据自己需要简单设置的,基于CUDA的编译方式
cmake -D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv-3.4/opencv_contrib-3.4/modules \
-D WITH_CUDA=ON ..
不需要CUDA编译方式的话最后一句改为 :
-D WITH_CUDA=OFF
三、正式编译
//根据电脑的最大线程数,我的是四核八线程 可以用sudo make -j8
sudo make -j4
然后进行安装
sudo make install
四、更新动态类链接库和bash配置
环境配置添加库路径
sudo gedit /etc/ld.so.conf.d/opencv.conf
//打开后可能是空文件,不用管,在文件内容最后添加即可
/usr/local/lib
更新系统库
sudo ldconfig
配置bash
sudo gedit /etc/bash.bashrc
//在末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存,执行如下命令使得配置生效
source /etc/bash.bashrc
更新
sudo updatedb
五、测试
1. 查看当前安装opencv版本号
pkg-config opencv --modversion
显示如:3.4.8
后面你可以写个简单的opencv程序测试下效果
六、遇到问题
(1)ippicv_2019_lnx_intel64_general_20180723.tgz 下载慢,卡住的问题。解决办法手动下载后放在自我指定的目录下,我放在了opencv-3.4目录下,即与build同级目录下。
然后修改opencv里相关配置文件
gedit ~/opencv-3.4/3rdparty/ippicv/ippicv.cmake
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}ippicv/"
# 改为手动下载的文件的本地路径(也就是将网络下载的模式改为本地文件下载的模式
"file:~/opencv-3.4/"
(2)face_landmark_model.dat 同上(1)手动下载
gedit /home/usrname/opencv_path/opencv/3rdparty/ippicv/ippicv.cmake
改为手动下载的文件的本地路径(也就是将网络下载的模式改为本地文件下载的模式)
"file:~/opencv-3.4/"
(3)在安装opencv的make编译过程中,报关于ceres的错误,一开始觉得可能是ceres版本不对,
尝试,卸载掉已经安装的ceres-solve后问题解决。
注意:以上(1)(2)(3)每个问题相应更改后,都需要重新cmake一下,再进行make
附加:
另外在安装cuda时,安装cuda后需要配置环境变量
即在~/.bashrc中添加
export CUDA_HOME=/usr/local/cuda-9.0
export PATH=/usr/local/cuda-9.0/bin:$PATH
LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH
然后
source使其生效
同时也需要配置动态链接库
gedit /etc/ld.so.conf.d/cuda.conf
添加:
/usr/local/cuda/lib64
更新生效
sudo ldconfig
后面再遇到其它小问题,会在此文基础上继续补充~