• linux-mint20.03编译opencv-3.4.11


    在linux-mint20.03上编译opencv-3.4.11

    参考链接:https://www.yuque.com/docs/share/0fefb9de-9f4b-45e5-93c4-2af8f6289b6b#

    Step I:下载源码

    从Github主页即可下载对应版本:https://github.com/opencv/opencv

    源码下载完成并且解压后,比如解压文件夹名称为opencv-3.4.11-sourcecode,要在这个文件夹下新建一个文件夹,比如build,CMAKE需要在../opencv-3.4.11-sourcecode/build目录下。

    Step II: 下载依赖项

    从官方文档https://docs.opencv.org/3.4.11/d2/de6/tutorial_py_setup_in_ubuntu.html查看需要提前安装的依赖项。

    一定要先安装依赖项,不然后面如果缺少依赖而导致报错,就要推倒重来。

    对于opencv-3.4.11,必须要有的依赖项:

    sudo apt-get install cmake
    sudo apt-get install gcc g++
    
    # for python 2
    sudo apt-get install python-dev python-numpy
    
    # for python 3
    sudo apt install python3-dev python3-numpy
    

    这里有关python2和python3,linux-mint20.03上python2.7和3.8都有,分别使用使用python2python3命令调用。在opencv的编译过程中,如果你只需要python3,那么可以忽略python2,那么最后只会有一个python3的文件夹,也只能在python3中使用;如果两个都配齐了,那会生成python2 python3两个文件夹,2和3都能使用。

    # GTK support
    sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
    sudo apt-get install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
    
    # support GTK 2
    sudo apt install libgtk2.0-dev
    
    # support GTK 3
    sudo apt install libgtk-3-dev
    

    可选依赖,主要是一些图片格式

    sudo apt-get install libpng-dev
    sudo apt-get install libjpeg-dev
    sudo apt-get install libopenexr-dev
    sudo apt-get install libtiff-dev
    sudo apt-get install libwebp-dev
    

    Step III: CMAKE

    如果选择默认位置安装的话,参照上面的链接即可。如果不是有特殊需求,直接使用默认位置是最推荐的。下面的配置除了添加/lib库之外,都不需要操作

    自己选择了位于Anaconda下的虚拟环境cv,python=3.8下构建,也需要提前在这个环境安装python-dev, numpy两个包;并且自己指定安装位置。

    ../opencv-3.4.11-sourcecode/build目录下进行CMAKE,注意,由于我们是虚拟环境,所以我们需要手动指定PYTHON等变量的位置:

    cmake ../ -DWITH_CUDA=OFF -DCMAKE_INSTALL_PREFIX=/opt/opencv-3.4.11 
    -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON 
    -DBUILD_DOCS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF 
    -DPYTHON3_EXECUTABLE=/home/rypan/miniconda3/envs/cv/bin/python3.8 
    -DPYTHON_INCLUDE_DIR=/home/rypan/miniconda3/envs/cv/include/python3.8 
    -DPYTHON_LIBRARY=/home/rypan/miniconda3/envs/cv/lib/libpython3.8.so 
    -DPYTHON3_NUMPY_INCLUDE_DIRS=/home/rypan/miniconda3/envs/cv/lib/python3.8/site-packages/numpy/core/include
    

    -D CMAKE_INSTALL_PREFIX为自己指定的安装位置,-D是指定CMAKE参数时的前缀;其他参数的解释:https://docs.opencv.org/3.4.11/d7/d9f/tutorial_linux_install.html

    上面PYTHON的可执行路径,库位置,NUMPY位置等,可能每个人都不同,所以可以先在自己的路径下找找看。

    CMAKE执行完毕后,可以看看output结果,看看有无明显的错误。

    Step IV: MAKE

    # 执行make编译,-j8参数表示允许cpu并行编译,最多允许8个线程,可以大大加速构建过程
    # -j根据自己cpu核心数设定,6核可以设为-j6~-j12
    make -j8
    
    # 安装编译好的可执行文件
    sudo make install
    

    完成后,自己选择的安装目录是/opt/opencv-3.4.11,可以查看一下这个目录下应该有三个文件夹bin/ lib/ share/

    Step V: 设置扫描路径和环境变量

    由于是自定义位置安装,所以我们需要手动配置从而让系统识别。

    通过/usr/bin/下的pkg-config命令,会扫描所有系统/usr/lib/下和环境变量PKG_CONFIG_PATH所定义的所有pkgconfig文件夹,这些文件夹都是存放各个程序编译信息.pc文件,pkg-config扫描后,这些.pc文件保存的编译信息就能被其他项目/程序获取。(.pc文件主要定义了安装程序的主目录prefix、可执行程序目录exec_prefix、lib目录libdir、包含目录includedir、sharedlibdir等,有点类似于环境变量,不过更多是为了程序编译服务的)

    这时,有两种方法:1. 把编译生成的opencv.pc放到系统的PKG-CONFIG文件夹下;2. 把生成的opencv.pc文件的路径添加到PKG-CONFIG-PATH

    METHOD 1

    $ whereis pkg-config
    pkg-config: /usr/bin/pkg-config /usr/lib/pkg-config.multiarch /usr/share/man/man1/pkg-config.1.gz
    
    $ whereis pkgconfig
    pkgconfig: /usr/lib/x86_64-linux-gnu/pkgconfig /usr/lib/pkgconfig /usr/share/pkgconfig
    
    $ pkg-config --variable pc_path pkg-config
    /usr/local/lib/x86_64-linux-gnu/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
    

    理论上可以将opencv.pc复制到任意一个pkg-config --variable pc_path pkg-config 列出的pkgconfig文件夹中。经过实验,在上面的路径中,/usr/lib/pkgconfig,/usr/lib/x86_64-linux-gnu/pkgconfig等都可以,我们编译生成的opencv.pc文件在/opt/opencv-3.4.11/下。原文中说:不过最好复制到/usr/local/lib/pkgconfig/下,这个自己没有实验过。

    Ubuntu18.04安装后,系统自带了opencv3.2.0,默认将opencv.pc存放在/usr/lib/x86_64-linux-gnu/pkgconfig/下,如果需要将opencv.pc复制到这里,可以先将系统自带的opencv.pc备份下,然后再cp过去。

    METHOD 2

    #修改bash.bashrc文件
    sudo vim /etc/bash.bashrc
    # 在最后加入:
    PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/opencv-3.4.11/lib/pkgconfig
    export PKG_CONFIG_PATH
    
    # 使生效
    source /etc/bash.bashrc
    #查看变量是否生效
    echo $PKG_CONFIG_PATH
    

    Step VI: 设置环境变量

    自定义位置编译时,可能会出现一种情况,编译成功安装成功,OpenCV的c++demo也可以正常运行,但是进入python环境import cv2时会发现找不到包。因为自定义编译时,生成的cv2模块路径是:/OPENCV_DIR_PATH/lib/python3.8/site-packages
    需要将此路径设置加入环境变量PYTHONPATH中,以便于python环境中import时可以找到cv2。

    # 新增PYTHONPATH环境变量
    sudo vim ~/.bashrc
    # 在后面加入
    export PYTHONPATH=$PYTHONPATH:/opt/opencv-3.4.11/lib/python3.8/site-packages
    
    source ~/.bashrc
    

    Step VII: 配置lib/路径

    将opencv的lib路径添加到配置,能被系统扫描到,有什么用?其他项目,如darknet构建时需要用到opencv的lib,就可以直接引用到。

    sudo vim /etc/ld.so.conf.d/opencv.conf
    # 添加opencv的lib位置
    /opt/opencv-3.4.11/lib
    
    # 刷新lib库目录
    sudo ldconfig
    # 刷新目录缓存
    sudo /sbin/ldconfig
    

    Step VIII: 验证

    通过版本号验证

    $ pkg-config opencv --modversion
    
    # python
    >>import cv2 as cv
    >>cv.__version__
    

    编译C++ DEMO

    cd opencv-3.4.11/samples/cpp/example_cmake
    cmake .
    make
    ./opencv_example
    

    效果图

    Step IX: 卸载

    直接在CMAKE的build目录下,sudo make uninstall,将opencv相关的可执行文件、lib文件等从安装位置删除,不过还是会留空下文件夹,需要手动删除。

    可以继续执行:sudo make clean将源码包内的编译相关文件删除、最后在build文件夹内执行sudo rm rf *删除源码包内所有文件

  • 相关阅读:
    前端学习
    json服务器
    https
    猎聘第一个项目总结
    biao项目技术点评
    编码
    Java补充
    MySQL无法同时执行多条语句解决办法
    Java 源码 Optional 类
    Java 源码 ArrayList 集合类
  • 原文地址:https://www.cnblogs.com/rongyupan/p/13430788.html
Copyright © 2020-2023  润新知