ubuntu在arm平台下编译安装opencv(亲测可用)

X86平台安装很多软件一句话就可以搞定,非常方便,但是在arm平台一个简单的软件安装起来都非常费尽,一个软件安装就要折腾好几天。下面就把安装opencv的过程记录下来

一、通过pip安装opencv,顺利安装成功,但是安装完成后运行报错

安装命令:

pip install opencv-python
或者:
sudo apt install libopencv-dev python3-opencv

python3-opencv是用于python3开发的库,你可以在终端输入
/usr/bin/python3 -c "import cv2;print(cv2.__version__)"来验证python3-opencv是否安装成功
pip3 install opencv-contrib-python==4.1.2.30

安装好后版本是4.6好像,因为报错我卸载了

报错内容:

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/home/yannqi/.local/lib/python3.8/site-packages/cv2/qt/plugins" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb (from /home/yannqi/.local/lib/python3.8/site-packages/cv2/qt/plugins), xcb, eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl.

试了网上说的方法,没有解决,有的说是opencv版本的问题,再着之前用的opencv就是4.1.2.30,所以就重新编译安装

二、编译安装opencv

1. 下载源码

在官方网站下载最新源代码,如果需要使用SIFT算法等扩展功能,下载opencv_contrib一起编译:

例如,opencv 4.1.2源码解压到当前目录下,opencv_contrib 4.1.2也解压到当前目录下

2. 安装各种依赖

依赖项也不清楚那些是需要的,为了装软件,看到能安装的都安装了,按照如下步骤:

# 安装系统依赖
sudo apt install build-essential cmake git libgtk2.0-dev \
                 pkg-config libavcodec-dev libavformat-dev libswscale-dev \
                 libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev \
                 libjasper-dev libdc1394-22-dev 
# 添加源以继续安装依赖libjasper
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"(ubuntu)
sudo add-apt-repository "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe"

# 安装系统依赖
​​​​​​​sudo apt-get update
 
sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev libeigen3-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libgtk-3-dev libtesseract-dev libopenblas-dev liblapack-dev libatlas-base-dev gfortran libprotobuf-dev protobuf-compiler libgoogle-glog-dev libgflags-dev libhdf5-dev liblmdb-dev libsnappy-dev python3-dev python3-numpy python3-pip
# 修复可能安装出错的依赖
sudo apt install -f

3. 开始编译安装

按照以下步骤:

mkdir build && cd build

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/firefly/Downloads/opencv_contrib-4.1.2/modules -D BUILD_opencv_python3=ON -D PYTHON3_EXECUTABLE=$(which python3) -D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") -D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") -D WITH_GTK_2_X=ON -D WITH_OPENGL=ON ..

make -j8
# 安装OpenCV到指定位置
sudo make install

以上步骤就可以安装完成,下面是之前编译过程,保留以便查阅​​​​​​​

# 在opencv4.4源码解压后的文件夹下面,创建编译文件夹
mkdir build && cd build
# 配置编译选项
# CMAKE_INSTALL_PREFIX 是最终OpenCV的安装位置
# OPENCV_ENABLE_NONFREE 指示是否开启Non-free的算法
# OPENCV_EXTRA_MODULES_PATH 指示扩展算法的源码文件夹
# WITH_CUDA 该选项需要确保自己已安装显卡驱动和cuda
# 可以关注下命令的输出,可以从中找到哪些模块没有配置成功
cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4.1 \
      -D OPENCV_ENABLE_NONFREE=ON \
      -D OPENCV_EXTRA_MODULES_PATH=/home/firefly/Downloads/opencv_contrib-4.1.2/modules \
      -D OPENCV_GENERATE_PKGCONFIG=YES \
      -D WITH_QT=ON \
      -D WITH_OPENGL=ON \
      -D WITH_CUDA=ON \
      -D BUILD_EXAMPLES=ON \
      -D INSTALL_PYTHON_EXAMPLES=ON \
      -D INSTALL_C_EXAMPLES=ON ..
# 开启12个线程同时编译源码
make -j8
# 安装OpenCV到指定位置
sudo make install

说明:

编译成功后不生成so文件,导入cv2失败,是因为

--   Python 3:
--     Interpreter:                 /usr/bin/python3 (ver 3.8.10)
--     Libraries:                   NO
--     numpy:                       NO (Python3 wrappers can not be generated)
--     install path:                -

需要添加python路径:

-D PYTHON3_EXECRTABLE=/usr/bin/python3   #python执行路径
-D PYTHON3_LIBRARY=/usr/lib/aarch64-linux-gnu/libpython3.8.so  #python本身的动态链接文件
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include #NUMPY所在位置


另外一种配置待测试
      -D PYTHON3_EXECRTABLE=/usr/bin/python3.8 \
      -D PYTHON3_LIBRARY=/usr/lib/aarch64-linux-gnu/libpython3.8.so  \
      -D Python3_INCLUDE_DIR=/usr/include/python3.8

如果该命令中不加-D CMAKE_INSTALL_PREFIX=/usr/local/opencv4.1,则默认各部分分别安装在/usr/local/目录的include/, bin/, lib/3个文件夹下。

-D OPENCV_GENERATE_PKGCONFIG=YES: OpenCV4以上版本默认不使用pkg-config,该编译选项开启生成opencv4.pc文件,支持pkg-config功能。

-D WITH_CUDA=ON实现和cuda的联合编译。

编译过程中出现了点问题:

报错1:

Makefile:162:recipe for target ‘all‘ failed make:*** [all] Error 2
前面会有错误:
fatal error: boostdesc_bgm.i: No such file or directory

出错原因:
出现问题的原因是因为boostdesc_bgm.i等文件没有下载成功。

解决方法
主要是2个位置的文件下载有问题:
①opencv/.cache/xfeatures2d/boostdesc
②opencv/.cache/xfeatures2d/vgg
cd到对应文件夹下,里面的文件是0K,然后用下载好的文件覆盖即可。

注:重新make前cmake一下。

下载文件

1、GitHub
在https://github.com/opencv/opencv_contrib/issues/1301中寻找leaf918用户,他提供了patch_.zip文件

2、GitHub
同样在https://github.com/opencv/opencv_contrib/issues/1301中,搜索BenbenIO的答案,按照他的步骤自己下载

报错2:

~/opencv_contrib/modules/xfeatures2d/src/boostdesc.cpp:673:20: fatal error: boostdesc_bgm.i: No such file or directory

解决方式:
采用的是源码编译的方式,所以可以查看 build 文件夹下的日志文件 CMakeDownloadLog.txt,在日志文件CMakeDownloadLog.txt中搜索 boostdesc_bgm.i 关键词 (不是在文件夹中搜索),
发现这个文件下载失败了。日志文件里就有它的下载地址,直接复制其下载地址到网页可以看该到文件的源码,直接拷贝源码并生存同名文件,放在 opencv_contrib/modules/xfeatures2d/src/ 路径下即可。
参考:fatal error: boostdesc_bgm.i: No such file or directory · Issue #1301 · opencv/opencv_contrib · GitHub

https://www.cnblogs.com/arxive/p/11778731.html

在Ubuntu16.04上编译opencv4.1.0-gpu带contrib版本碰到的问题_cxa_init_primary_exception_SeventhBlue的博客-CSDN博客

报错3:

  Could not find a package configuration file provided by "Qt5" with any of
  the following names:

    Qt5Config.cmake
    qt5-config.cmake

  Add the installation prefix of "Qt5" to CMAKE_PREFIX_PATH or set "Qt5_DIR"
  to a directory containing one of the above files.  If "Qt5" provides a
  separate development package or SDK, be sure it has been installed.
Call Stack (most recent call first):
  CMakeLists.txt:669 (include)

解决办法:

1.在在Cmakelist 中设置 Qt5路径,不知道为啥不行

  set(QT5_DIR"/usr/local/Qt-5.15.2/lib/cmake/Qt5")

2.在终端设置CMAKE_PREFIX_PATH 

export CMAKE_PREFIX_PATH=/usr/local/Qt-5.15.2/lib/cmake/Qt5

最后终于编译成功。

添加python支持

sudo ln -s /usr/local/opencv4.1/lib/python3.8/dist-packages/cv2/python-3.8/cv2.cpython-38-aarch64-linux-gnu.so /usr/lib/python3/dist-packages/cv2.so

4. 配置python3的opencv环境(试了好像没用,终端导入cv2没问题,但是在pycharm中导入提示找不到)

首先需要找到编译好的用于python3的动态库文件的位置,可以使用如下代码搜索(其实在sudo make install时也会显示):
sudo find / -iname "cv2*.so"
得到路径为/usr/local/opencv4.1/lib/python3.8/site-packages/cv2/python-3.8/cv2.cpython-38-aarch64-linux-gnu.so
然后把它复制到对应python解释器的/usr/lib/python3.8/dist-packages/
(系统自带的python解释器)和/path/to/site-packages(用户安装的python解释器)目录下,之后就能在该python解释器中使用python-opencv库:

# 查看系统Python环境的包路径
/usr/bin/python3 -c "import pip;print(pip)"
# 创建软链接使得/usr/bin/python3可以使用opencv
sudo ln -s /usr/local/opencv4.1/lib/python3.8/site-packages/cv2/python-3.8/cv2.cpython-38-aarch64-linux-gnu.so /usr/lib/python3/dist-packages/cv2.so
# 测试安装结果
/usr/bin/python3 -c "import cv2;print(cv2.__version__)"

4.1 配置OpenCV动态库环境(程序执行时加载动态库*.so的路径)

首先将OpenCV的库添加到路径:

sudo vim /etc/ld.so.conf.d/opencv.conf

打开的可能是一个空白的文件,不用管,只需要在文件末尾一行添加:

/usr/local/opencv4.1/lib

然后使得刚才的配置路径生效

sudo ldconfig

4.2 配置pkg-config环境

配置bash:

sudo vim /etc/bash.bashrc

在文件末尾添加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv4.1/lib/pkgconfig
export PKG_CONFIG_PATH

注意这里的路径以cmake时候设置的为准。

保存后需要激活一下:

source ~/.bashrc

更新一下:
sudo apt install mlocate
sudo updatedb

验证是否配置完成:

pkg-config --libs opencv4
或者:
pkg-config --modversion opencv4

    输出结果如下:

-L/usr/local/opencv4.1/lib -lopencv_world

      pycharm中输出正常的opencv版本4.1.2

5. 卸载编译安装的OpenCV

  1. 进入编译时的文件夹cd build
  2. 执行卸载命令sudo make uninstall,此命令会删除安装时添加的所有文件,但是不处理文件夹
  3. 根据上一个命令的回显,删除目的文件夹的与该软件有关的空文件夹

参考连接:ubuntu系统编译安装OpenCV 4.4 - zfb132 - 博客园

Ubuntu 20.04 从源码编译并配置OpenCV 4.4.0 以及python 3.8支持 - 简书 (jianshu.com)

人工智能编译方案,值得借鉴:

要在Ubuntu下编译安装OpenCV并支持Python和GUI,可以按照以下步骤操作:

  1. 安装依赖项

首先需要安装一些依赖项,包括构建工具、图像和视频I/O库、图像处理库、GUI库等。可以使用以下命令进行安装:

​​​​​​​sudo apt-get update

sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev libeigen3-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libgtk-3-dev libtesseract-dev libopenblas-dev liblapack-dev libatlas-base-dev gfortran libprotobuf-dev protobuf-compiler libgoogle-glog-dev libgflags-dev libhdf5-dev liblmdb-dev libsnappy-dev python3-dev python3-numpy python3-pip
  1. 下载OpenCV源代码

可以从OpenCV官网上下载最新的源代码:https://opencv.org/releases/ ↗

或者使用以下命令从GitHub上下载:

git clone https://github.com/opencv/opencv.git
  1. 编译安装OpenCV

进入OpenCV源代码目录,创建一个build目录,并进入该目录:

​​​​​​​cd opencv

mkdir build

cd build

使用cmake配置编译选项,并指定Python版本:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_opencv_python3=ON -D PYTHON3_EXECUTABLE=$(which python3) -D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") -D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") -D WITH_GTK_2_X=ON -D WITH_OPENGL=ON ..

其中,BUILD_opencv_python3指定是否编译支持Python3,PYTHON3_EXECUTABLE指定Python3可执行文件路径,PYTHON3_INCLUDE_DIR指定Python3头文件路径,PYTHON3_PACKAGES_PATH指定Python3包路径,WITH_GTK_2_X指定开启GTK 2.x支持,WITH_OPENGL指定开启OpenGL支持。

然后使用make命令进行编译:

​​​​​​​make -j$(nproc)

其中,-j$(nproc)参数指定使用所有可用的CPU核心。

最后,使用sudo make install命令进行安装:

​​​​​​​sudo make install

安装完成后,可以使用以下命令检查OpenCV是否安装成功:

pkg-config --modversion opencv

如果成功安装,将会输出安装的OpenCV版本号。

  1. 配置Python环境

在安装完OpenCV后,还需要配置Python环境,以便使用OpenCVPython接口。

首先需要安装PythonOpenCV包:

pip3 install opencv-python-headless   //虽然可以导入成功,但是
python3 -c "import cv2; print(cv2.__file__)"返回的路径不对

//下面的返回路径正确
sudo apt update
sudo apt install python3-opencv  

然后在Python中导入OpenCV

​​​​​​​import cv2

如果不出现错误提示,则说明OpenCV已经成功安装并支持Python

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值