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
一起编译:
- 下载适用于linux的opencv源码的zip压缩文件并解压
- 下载opencv_contrib源码的zip压缩文件并解压
例如,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
- 进入编译时的文件夹
cd build
- 执行卸载命令
sudo make uninstall
,此命令会删除安装时添加的所有文件,但是不处理文件夹 - 根据上一个命令的回显,删除目的文件夹的与该软件有关的空文件夹
参考连接:ubuntu系统编译安装OpenCV 4.4 - zfb132 - 博客园
Ubuntu 20.04 从源码编译并配置OpenCV 4.4.0 以及python 3.8支持 - 简书 (jianshu.com)
人工智能编译方案,值得借鉴:
要在Ubuntu下编译安装OpenCV并支持Python和GUI,可以按照以下步骤操作:
- 安装依赖项
首先需要安装一些依赖项,包括构建工具、图像和视频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
- 下载OpenCV源代码
可以从OpenCV官网上下载最新的源代码:https://opencv.org/releases/ ↗
或者使用以下命令从GitHub上下载:
git clone https://github.com/opencv/opencv.git
- 编译安装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版本号。
- 配置Python环境
在安装完OpenCV后,还需要配置Python环境,以便使用OpenCV的Python接口。
首先需要安装Python的OpenCV包:
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。