天天看点

Jetson Nano Ubuntu编译OpenCV4.4.0+opencv_contrib(带CUDA)

本文方法是用在Jetson Nano开发板上的,开发板提供的官方系统镜像中,安装的是OpenCV4.1.1,在调用TensorFlow2的模型时有问题,于是手动编译OpenCV4.4.0进行测试,发现可行。下面介绍OpenCV4.4.0的编译安装过程。

1、环境准备

  1. 按照开发板入门教程把CUDA和cudnn配置好
  2. 确保安装了CMake
  3. 下载OpenCV4.4.0
  4. 下载对应版本的opencv_contrib

2、卸载旧版本OpenCV

sudo apt-get purge libopencv*
sudo apt autoremove
sudo apt-get update
           

3、安装依赖项

sudo apt-get install build-essential
sudo apt-get install libglew-dev libtiff5-dev zlib1g-dev libjpeg-dev \ 
	libavcodec-dev libavformat-dev libavutil-dev libpostproc-dev \
	libswscale-dev libeigen3-dev libtbb-dev libgtk2.0-dev pkg-config libpng-dev	
sudo apt-get install libatlas-base-dev gfortran
sudo apt update
sudo apt upgrade
           

4、编译安装

  1. 新建一个目录opencv4,把OpenCV4.4.0的源码解压到里面,然后再在opencv4中新建一个opencv_contrib目录,将opencv_contrib4.4.0的源码解压到里面
  2. cd到yourpath/opencv4,运行以下命令:
    mkdir build
    cd build
    cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DBUILD_PNG=OFF \
    -DBUILD_TIFF=OFF \
    -DBUILD_TBB=OFF \
    -DBUILD_JPEG=OFF \
    -DBUILD_JASPER=OFF \
    -DBUILD_ZLIB=OFF \
    -DBUILD_EXAMPLES=OFF \
    -DBUILD_opencv_java=OFF \
    -DBUILD_opencv_python2=OFF \
    -DBUILD_opencv_python3=ON \
    -DENABLE_PRECOMPILED_HEADERS=OFF \
    -DOPENCV_GENERATE_PKGCONFIG=ON \
    -DWITH_OPENCL=OFF \
    -DWITH_OPENMP=OFF \
    -DWITH_FFMPEG=ON \
    -DWITH_GSTREAMER=OFF \
    -DWITH_GSTREAMER_0_10=OFF \
    -DWITH_CUDA=ON \
    -DOPENCV_DNN_CUDA=ON \
    -DWITH_GTK=ON \
    -DWITH_VTK=OFF \
    -DWITH_TBB=ON \
    -DWITH_1394=OFF \
    -DWITH_OPENEXR=OFF \
    -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.2 \
    -DCUDA_ARCH_BIN=5.3 \
    -DCUDA_ARCH_PTX="" \
    -DINSTALL_C_EXAMPLES=OFF \
    -DOPENCV_ENABLE_NONFREE=ON \
    -DINSTALL_TESTS=OFF \
    -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \
    -DCMAKE_INSTALL_PREFIX=/usr/local ..
    sudo make -j4
    sudo make install
               

    cmake的配置选项“-DOPENCV_GENERATE_PKGCONFIG=ON”是为了编译时生成opencv4.pc文件,这个文件可以把opencv库的各种信息告诉pkg-config,“-DWITH_CUDA=ON”和“-DOPENCV_DNN_CUDA=ON”是为了编译CUDA相关代码,之后就可以用dnn模块调用GPU了,“-DCMAKE_INSTALL_PREFIX=/usr/local”指定了库的安装路径前缀,之后库文件就会被安装在/usr/local/lib中,头文件被放在/usr/local/include/opencv4/opencv2/中,这里的“/usr/local”其实也是默认值。

    编译过程比较长,耐心等待即可。

    5、配置系统环境变量

    1. 当操作系统加载动态库时,会首先去读取/etc/ld.so.conf文件,然后进入/etc/ld.so.conf.d目录下,读取里面所有的配置文件,这些配置文件内记载着库的路径,这样就可以找到动态库,因此需要将OpenCV库目录添加到/etc/ld.so.conf.d/opencv.conf:
      sudo vim /etc/ld.so.conf.d/opencv.conf
                 
      用上面的命令创建\打开

      opencv.conf

      后,在文件末尾添加:

      /usr/local/lib

      然后使用下面的命令使配置生效:
      sudo ldconfig
                 
    2. pkg-config 能通过库提供的 .pc 文件获得库的各种必要信息,包括版本信息、编译和连接需要的参数等。通过 pkg-config 提供的参数–cflags, –libs,将所需信息提取出来供编译和连接使用。当pkg-config运行时,会在其配置目录下查找.pc文件,找到对应的文件就读取它,pkg-config的默认路径是: /usr/lib/pkgconfig/和/usr/share/pkgconfig/,这里我们为它添加一个新的路径

      /usr/local/lib/pkgconfig

      ,首先在/usr/local/lib/目录中新建pkgconfig目录:
      cd /usr/local/lib
      mkdir pkgconfig
                 

      然后把build/unix-install文件夹下编译生成的opencv4.pc 拷贝进/usr/local/lib/pkgconfig

      之后把这个目录加入PKG_CONFIG_PATH ,首先打开文件:

      sudo vim /etc/bash.bashrc
                 
      在文件末尾加入:
      PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 
      export PKG_CONFIG_PATH 
                 
      保存退出后,更新系统环境变量:
      source /etc/bash.bashrc 
                 

6、验证

在终端输入:

opencv_version
           

应当出现OpenCV版本号。

在终端输入:

pkg-config opencv4 --modversion
           

也应当出现OpenCV版本号。

继续阅读