Ubuntu 20.04 编译 Opencv 4.11,详细步骤(带图)及报错解决,我的踩坑之旅~

电脑环境:

1、ubuntu 20.04

2、opencv 4.11

3、opencv_contrilb 4.11

一、OpenCV GitHub 地址

opencv github

opencv_contrilb github

两者版本最好是一致的

二、编译前需要准备的基础依赖

1、基础依赖

sudo apt install -y cmake make
sudo apt install -y build-essential

sudo apt install -y libgtk2.0-dev
sudo apt install -y libavcodec-dev
sudo apt install -y libavformat-dev
sudo apt install -y libjpeg-dev
sudo apt install -y libtiff-dev
sudo apt install -y libswscale-dev
sudo apt install -y libpng-dev

# 添加这个才能找到 libjasper-dev 这个包依赖
sudo add-apt-repository "deb <http://security.ubuntu.com/ubuntu> xenial-security main"

sudo apt update
sudo apt install  -y libjasper-dev

sudo apt install -y freeglut3-dev
sudo apt install -y libgl1-mesa-dev

sudo apt install -y pkg-config

依赖我就不一一说明啦,大部分都是关于图片分析和图片处理的依赖。

2、gstreamer 相关依赖

sudo apt update
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev libgstreamer-plugins-good1.0-dev
sudo apt install -y gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly
sudo apt install -y gstreamer1.0-tools gstreamer1.0-libav
sudo apt install -y gstreamer1.0-doc gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio

此处依赖是我需要用到 gstreamer 相关依赖,才进行下载的,但如果无需用到,可以不下载此处依赖,后续中的 cmake 命令的参数请也进行相应的调整

3.GTK支持(图形界面库)

*# 安装gtk2支持*
sudo apt-get install libgtk2.0-dev
*# 安装gtk3支持*
sudo apt-get install libgtk-3-dev

三、编译 opencv 代码

1、cd opencv-4.1.1

image.png

2、mkdir build

3、cd build

4、在build 目录下执行 cmake 命令,具体的 cmake 命令和相关参数如下:

sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_GENERATE_PKGCONFIG=ON \ -D BUILD_EXAMPLES=OFF \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D INSTALL_C_EXAMPLES=OFF \ -D PYTHON_EXECUTABLE=$(which python2) \ -D BUILD_opencv_python2=OFF \ -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 OPENCV_EXTRA_MODULES_PATH=/home/nzc/Desktop/project/opencv4/opencv_contrib-4.1.1/modules/ \ -D WITH_GSTREAMER=ON \ ..

这段cmake命令中的参数作用如下:

  • D CMAKE_BUILD_TYPE=RELEASE:指定编译类型为RELEASE,这将启用优化和禁用调试信息。

  • D CMAKE_INSTALL_PREFIX=/usr/local:指定安装目录为/usr/local,这将安装OpenCV到系统级别。

  • D OPENCV_GENERATE_PKGCONFIG=ON:生成.pc文件,以便其他程序可以方便地使用OpenCV库。

  • D BUILD_EXAMPLES=OFF:禁用编译OpenCV示例程序。

  • D INSTALL_PYTHON_EXAMPLES=OFF:禁用安装Python示例程序。

  • D INSTALL_C_EXAMPLES=OFF:禁用安装C示例程序。

  • D PYTHON_EXECUTABLE=$(which python2):指定Python 2解释器的路径。

  • D BUILD_opencv_python2=OFF:禁用编译Python 2的OpenCV绑定。

  • D PYTHON3_EXECUTABLE=$(which python3):指定Python 3解释器的路径。

  • D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())"):指定Python 3的头文件路径。

  • D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"):指定Python 3的包路径。

  • D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules/:指定OpenCV额外模块的路径。 需要将 opencv_contrib 下载下来,如何指定本机电脑具体的位置中。此处我填写的我本机的绝对路径。

image.png

  • D WITH_GSTREAMER=ON:启用 GStreamer 支持,以便 OpenCV 可以读取和写入 GStreamer流。

这些参数可以根据您的需求进行调整,例如如果您不需要Python支持,可以禁用相关参数。

文章参考链接:

developer.ridgerun.com/wiki/index.…

5、cmake 结果

image.png

反正此处的结果我建议是截图保存一下,方便后面用到~

四、make & make install ,此处有坑

1、sudo make -j8

执行完上述过程后,在原来的目录上执行 sudo make -j8,后面这个 -j8 参数,一般是指定make任务过程的处理器个数,一般编译的快,5分钟就搞定啦~ (虚拟机贼慢把慢,当然也是我分配的处理器少)此处过程有坑,后续慢慢道来吧~

编译过程中一般来说只需要注意 error 的日志输出

2、出现错误1,缺少 boostdesc_bgm.i 文件

image.png

此处问题大都出现在 make 到 80%-85% 时所出现的问题,不同的版本的进度条可能会稍微有一点点的变化:

在CSDN找到一位博主的解决方案:blog.csdn.net/AlexWang30/…

笔者在网上查找一番后,发现网上大都给出了解决方案,无非就是将以下文件:

boostdesc_bgm.i boostdesc_bgm_bi.i boostdesc_bgm_hd.i boostdesc_lbgm.i boostdesc_binboost_064.i boostdesc_binboost_128.i boostdesc_binboost_256.i vgg_generated_120.i vgg_generated_64.i vgg_generated_80.i vgg_generated_48.i 拷贝到opencv_contrib/modules/xfeatures2d/src/目录下,而且网上直接可以用的资源并不多。

作者也给出啦具体的百度云资源~

百度云链接:pan.baidu.com/s/1BeYF8kqE…

提取码:e1wc

咱就是说~ 好人一生平安,一胎八个~


image.png

再次回到 build,重新执行 make 命令,你以为会成功是吧,做梦吧,我也想成功勒

3、出现错误2,缺少 features2d/test/test_detectors_regression.impl.hpp

image.png

出现了这个错误,但是这个错误,还能在 github 中的 issue 中找到,并且 issue 也谈到啦上面的那个错误

//home/nzc/Desktop/project/opencv4/opencv_contrib-4.1.1/modules/xfeatures2d/test/test_features2d.cpp:51:10: fatal error: features2d/test/test_detectors_regression.impl.hpp: 没有那个文件或目录
   51 | #include "features2d/test/test_detectors_regression.impl.hpp"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [modules/xfeatures2d/CMakeFiles/opencv_test_xfeatures2d.dir/build.make:76:modules/xfeatures2d/CMakeFiles/opencv_test_xfeatures2d.dir/test/test_features2d.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:10363:modules/xfeatures2d/CMakeFiles/opencv_test_xfeatures2d.dir/all] 错误 2
make: *** [Makefile:163:all] 错误 2

最开始是看到 issue #15818 :Ubuntu 16.04安装opencv过程中,输入make命令后报错。opencv /opencv#15818

然后又指向啦 issue #1950:ubuntu build make error #1950

前行者亦是躺坑者~~

我在issue中找了个最简单的,好像能解决问题的方式来尝试啦一下,我是成功了,但其他的,我也很难说。

image.png

cp -r ~/opencv/modules/features2d ~/opencv/build 请根据自己目录进行合适的修改

我的目录结构如下图,执行结果也如下图:

image.png

然后再次重新执行 sudo make -j8

4、sudo make successful

最后的日志输出,出现类似下图的结果则表示 build 成功啦

image.png

5、sudo make install

出现下图就是成功啦 image.png

默认位置安装,则会安装到系统如下目录:

  • /usr/local/bin
  • /usr/local/lib
  • /usr/local/share

bin下的可执行文件:

image.png

lib是库文件,主要是以libopencv开头的so文件、文件夹:pkgconfig、python2.x、python3.x(pkgconfig里存放的是opencv.pc);share里就两个文件夹:OpenCV和licenses 安装好还需要进行配置,见后文。

五、使用前的准备和检查是否安装成功

5.1、动态链接

重新載入動態連結,

sudo ldconfig -v

image.png

这里的 -v 参数就是将相关信息输出到屏幕上,不想看可以直接去掉 -v 参数。

5.2、检查版本信息

1、使用 pkg-config 查詢已安裝的 opencv 版本

pkg-config opencv4 --modversion

opencv4.1.1

image.png

2、使用 opencv_version 指令查詢已安裝 opencv 的版本。

opencv_version4.1.1

image.png

这个命令我也不知道咋,其他两个都是正常的,这个看到的就是 4.2.0 版本

3、使用python3 命令

import cv2 as cv

print(cv.__version__)

输出opencv的版本就是正确的,如果这里不能够正常使用,比如那种找不到 cv2 模块,那么就需要去配置一下环境变量

5.3、配置环境变量

有时候编译成功啦,c++ Demo 也能跑,也能正常调用 opencv ,但是进入到 python 环境,import cv2 就会爆找不到包,或者是其他的问题。 那么可以尝试去配置一下环境变量。让python 去找到相应的包。

我们编译时,采用的默认的安装路径,所以生成的cv2模块路径是:

image.png

我的电脑是: /usr/lib/python3/dist-packages/ ,我们需要将此路径加入到环境变量 PYTHONPATH 中,以便于 python 环境中 import 时可以找到 cv2

# 新增PYTHONPATH环境变量
sudo vim ~/.bashrc

export PYTHONPATH**=**$PYTHONPATH:/usr/lib/python3/dist-packages

source ~/.bashrc

如果和我一样选择默认的安装的路径,直接复制进去即可~ 如果是自定义安装路径的,就需要相应调整一下。

后语

反正目前就这样啦,这周末就躺平在家玩了双系统,简单搭建了一下开发环境,后面应该还会输出几篇类似的基础的文章吧。

也是我这个小趴菜的踩坑之旅~


今年的四月五月对于我来说,是不太平静的,甚至可以说是动荡不安的。一直到最近,才重新开始了阅读,重新开始活跃在掘金,又再次开始码字~

也是在今天再次听到自己敲下清脆又连贯的键盘声,那一瞬间好似突然看见了过去的认真写博客的自己啦

六月已经过完第一周啦,618也快要到了,2023年在无声间已经快过完一半啦

问个无关的问题,你对今年的自己满意吗~

猜你喜欢

转载自juejin.im/post/7240740177449549879