本文方法是用在Jetson Nano开发板上的,开发板提供的官方系统镜像中,安装的是OpenCV4.1.1,在调用TensorFlow2的模型时有问题,于是手动编译OpenCV4.4.0进行测试,发现可行。下面介绍OpenCV4.4.0的编译安装过程。
1、环境准备
- 按照开发板入门教程把CUDA和cudnn配置好
- 确保安装了CMake
- 下载OpenCV4.4.0
- 下载对应版本的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、编译安装
- 新建一个目录opencv4,把OpenCV4.4.0的源码解压到里面,然后再在opencv4中新建一个opencv_contrib目录,将opencv_contrib4.4.0的源码解压到里面
- 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、配置系统环境变量
- 当操作系统加载动态库时,会首先去读取/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
- 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
- 当操作系统加载动态库时,会首先去读取/etc/ld.so.conf文件,然后进入/etc/ld.so.conf.d目录下,读取里面所有的配置文件,这些配置文件内记载着库的路径,这样就可以找到动态库,因此需要将OpenCV库目录添加到/etc/ld.so.conf.d/opencv.conf:
6、验证
在终端输入:
opencv_version
应当出现OpenCV版本号。
在终端输入:
pkg-config opencv4 --modversion
也应当出现OpenCV版本号。