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 *删除源码包内所有文件

原文地址:https://www.cnblogs.com/rongyupan/p/13430788.html