先前准备:
1.最好不要改动ubuntu默认的python2与3的版本,容易出问题。需要选择时用python,python3,python3.x选择即可。
2.ubuntu18.04 pc端装机自带的3.x.x版本可以放着不动,不冲突。如果在提前安装了ROS的情况下,用remove完全卸载opencv可能会导致ROS许多文件被删除,慎重。
3.TX2的opencv安装方法同下,TX2刷机自带的opencv4.x.x会被直接覆盖,无需卸载。查询TX2的cuda arch bin需要安装jtop,安装教程可直接搜索,非常简单。
4. ..- -. .. -. ... - .- .-.. .-.. -....- --- .--. . -. -.-. ...- .--. -.-- - .... --- -. -....- ..-. .. .-. ... -
1.安装教程
第一步:
下载opencv与opencv-contrib的源码包,注意版本对应
opencv:https://github.com/opencv/opencv/releasesopencv-contrib:https://github.com/opencv/opencv_contrib/releases
第二步:
解压opencv与opencv-contrib,并将opencv-contrib文件夹放到opencv文件夹中
第三步:
安装依赖
sudo apt-get install build-essential \
libavcodec-dev \
libavformat-dev \
libavutil-dev \
libeigen3-dev \
libglew-dev \
libgtk2.0-dev \
libgtk-3-dev \
libjpeg-dev \
libpostproc-dev \
libswscale-dev \
libtbb-dev \
libtiff5-dev \
libv4l-dev \
libxvidcore-dev \
libx264-dev \
qt5-default \
zlib1g-dev \
libavresample-dev \
gstreamer1.0-plugins-bad \
pkg-config
其中可能会遇到依赖包libjasper-dev无法安装的问题
使用命令 sudo apt-get install libjaster-dev 后
提示:errorE: unable to locate libjasper-dev
解决方法:
sudo add-apt-repository "deb Index of /ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev
成功的解决了问题,其中libjasper1是libjasper-dev的依赖包
第四步:
进入opencv目录下,创建build文件夹(我用的4.5.1)
cd opencv-4.5.1
mkdir build
cd build
cmake编译(建议先按照后面重要部分配置完后再进行cmake编译)
cmake -DCMAKE_BUILD_TYPE=RELEASE\
-D CMAKE_INSTALL_PREFIX=/usr/local\
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.1/modules\
-D WITH_CUDA=1\
-D WITH_CUDNN=ON \
-D WITH_TBB=ON \
-D OPENCV_DNN_CUDA=ON \
-D CUDA_ARCH_BIN='7.2'\
-D ENABLE_FAST_MATH=1\
-D CUDA_FAST_MATH=1\
-D WITH_CUBLAS=1\
-D BUILD_opencv_python3=ON -DBUILD_opencv_python2=ON\
-D WITH_V4L=ON\
-D WITH_QT=ON\
-D WITH_OPENGL=ON\
-D OPENCV_GENERATE_PKGCONFIG=1\
-D WITH_GSTREAMER=ON\
-D CUDA_GENERATION=Pascal ..
部分编译命令解释:
cmake -DCMAKE_BUILD_TYPE=RELEASE\
-D CMAKE_INSTALL_PREFIX=/usr/local\#指定安装路径
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.1/modules\#opencv_contirb modules路径
-D WITH_CUDA=1\#使用cuda加速 需要配置好cuda
-D WITH_CUDNN=ON\#需要配置好cudnn
-D WITH_TBB=ON\
-D OPENCV_DNN_CUDA=ON\
-D CUDA_ARCH_BIN='7.2'\#指定显卡算力,根据自己的显卡算力填,下面有教程
-D ENABLE_FAST_MATH=1\
-D CUDA_FAST_MATH=1\
-D WITH_CUBLAS=1\
-D BUILD_opencv_python3=ON -DBUILD_opencv_python2=ON\
-D WITH_V4L=ON\
-D WITH_QT=ON\
-D WITH_OPENGL=ON\
-D OPENCV_GENERATE_PKGCONFIG=1\用于生成opencv4文件,查版本用的
-D WITH_GSTREAMER=ON\
-D CUDA_GENERATION=Pascal ..
重要部分
以下内容最好在cmake之前提前搞完,因为像face_landmark、boostdesc_bgm.i、vgg、ippv这些文件国内一般会下载失败,需要下载的文件链接放在文章最后。
1. -D CUDA_ARCH_BIN='7.2' 这行编译很重要,不然老是导致opencv配置失败
加了有时候cuda还会报错,可以看这节最后部分的解决方法。
查询自己的显卡算力方式如下:
Ubuntu18 查看CUDA的CUDA_ARCH_BIN
或者常见的显卡直接从图里找:
2.cmake可能会卡在ippicv下载的地方,一直下载不下来
解决方法:
a.手动下载ippicv 不用解压
b.修改opencv里的配置文件
打开终端,输入:
$ gedit /home/usrname/opencv_path/opencv/3rdparty/ippicv/ippicv.cmake
#记得usrname换成自己的用户名,opencv_path 换成自己opencv文件夹的路径
#或者直接在opencv里跟着路径3rdparty/ippicv/,直接双击打开ippicv.cmake也行
将ippicv.cmake文件下的第47行替换为本地路径
"file:///home/usrname/install/"
#"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"
#file后面的路径换成对应ippicv下载后保存的路径,索引到放ippicv的那个文件夹就行
3.cmake可能会卡在face_landmark_model.dat下载的地方,一直下载不下来。
解决方法:
a.手动下载face_landmark_model.dat
b.修改opencv里的配置文件
打开终端,输入:
$ gedit /home/usrname/tool/opencv-4.5.1/opencv_contrib-4.5.1/modules/face/CMakeLists.txt
#usrname 换成自己的用户名, <tool/opencv-4.5.1>换成自己opencv源码对应的文件夹
#还是对着路径直接进去找快一点
将CMakeLists.txt文件的第19行修改为本地路径,即将原来的网址修改为下载的文件保存的路径
"file:///home/usrname/install/"
#"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}/"
# usrname记得替换为自己的用户名
#路径记得替换为自己文件对应的路径,索引到放face的那个文件夹就行
4.cmake可能会卡在boostdesc_bgm.i下载的地方,一直下载不下来。
解决方法:
a.手动下载boostdesc_bgm.i并解压
将下载的文件(不是文件夹)拷贝到opencv_contrib/modules/xfeatures2d/src/目录下
b.修改opencv里的配置文件(改两个)
改boostdesc_bgm.i地址
$ gedit /home/usrname/tool/opencv-4.5.1/opencv_contrib-4.5.1/modules/xfeatures2d/cmake/download_boostdesc.cmake
"file:///home/usrname/install/"
# 同理跟前面操作一样,找到原来的下载网址,改为本地文件地址,索引到存放的文件夹就行。
改vgg的地址:
$ gedit /home/usrname/tool/opencv-4.5.1/opencv_contrib-4.5.1/modules/xfeatures2d/cmake/download_vgg.cmake
"file:///home/usrname/install/"
# 同理跟前面操作一样,找到原来的下载网址,改为本地文件地址,索引到存放的文件夹就行。
2、3步骤:
4步骤:
以上步骤完成后就可以开始编译opencv了,进行第四步的cmake操作。
5.cmake完之后会给一个大致如下图的列表,及得检查:
1.检查一下cuda,cudnn是否检测到了
2.检查cudnn版本是否合适
3.检查NVIDIA GPU arch是否和自己之前输入的CUDA_ARCH_BIN是否一样,CUDA_ARCH_BIN=7.5的话这里应该会显示75。如果显示的数字不匹配,可以参考:Please check CUDA_ARCH_PTX or CUDA_ARCH_BIN in your build configuration错误解决
第五步:
进行make,然后等待(pc的话make很快,tx2等板子就要跑很久了,核心太少),make成功后,进行安装 。
nproc # 查看核数
sudo make -jx #x是核数,加速编译,也有说x最大可以是核数的两倍的。但是我的1650用j12容易卡死 最后用的j8
sudo make install
有时候会在99,100编很多东西,不要着急,出来像上图一样的新命令行NVIDIA...才算完成。
其中make过程中遇到了几个问题:
1.fatal error: features2d/test/test_detectors_regression.impl.hpp: No such file or directory
原因是没找到这个文件,解决方法如下:
将opencv / modules / features2d复制,然后粘贴到opencv / build目录中来解决该问题。
2.
第六步:
配置opencv库
首先将OpenCV的库添加到路径,从而可以让系统找到
sudo gedit /etc/ld.so.conf.d/opencv.conf
执行此命令后打开的可能是一个空白的文件,不用管,只需要在文件末尾添加
/usr/local/lib
保存后退出
然后生效配置文件。
sudo ldconfig
配置bash.bashrc文件
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. 在终端输入代码:
pkg-config --modversion opencv4
# 输出 4.5.1
python3 -c "import cv2; print(cv2.__version__)"
# 输出 4.5.1
2.找到 opencv-4.5.1/samples/cpp/example_cmake 目录下,官方已经给出了一个cmake的example,我们可以拿来测试下。按顺序执行:
mkdir build
cd build
cmake ..
make
./opencv_example
出现你的摄像头影像,安装完成。
OK大功告成,可以愉快的使用opencv了。
卸载:
在opencv/build里运行
sudo make uninstall
然后把build删了就行,这个方法卸载的不彻底,一般用于编错了重编。
opencv编译过程中缺少的文件:
opencv编译时缺少的文件
配置好的opencv4.5.1+contrib(build中除了features2d都删除然后重新编译):