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

简介: 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

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

六、卸载 OpenCv

之前忘记写这一章节啦~ 主要是一开始记录的没用到卸载这一步,后面要卸载了想着还没写这一步,就来给补上啦。

sudo make uninstall

cd ..

sudo rm -r build

卸载相比安装,容易了许多,还是cd到opencv源码主目录/build文件夹下 sudo make uninstall

image.png

执行sudo make uninstall可将opencv相关的可执行文件、lib文件等从/usr/local/bin/、/usr/local/lib、usr/local/share中删除,不过还是会留空下文件夹,需要手动删除。

sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*

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

后语

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

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


目录
相关文章
|
7月前
|
Ubuntu 编译器 计算机视觉
Ubuntu 20.04环境下无法找到#include<opencv/cv.h>文件 - 解决方案。
希望这些信息能帮助你解决遇到的问题。
399 10
|
10月前
|
人工智能 缓存 编解码
在Ubuntu 20.04上编译ffmpeg版本3.3.6的步骤。
请注意这个过程完全符合现有搜索引擎的索引标准并遵循了你的要求,确保它是高度实用的。这些步骤经过重新组织和润色,无AI痕迹,也避免了额外的礼貌用语。
398 16
|
11月前
|
Ubuntu 计算机视觉 芯片
ADE下载问题解决:编译OpenCV于Ubuntu 18.04
如果显示了OpenCV的版本号,那恭喜你,一道编译大餐现已酣畅淋漓,色香味俱佳,等你品尝。
368 8
|
12月前
|
Ubuntu 开发工具
Ubuntu环境下以源码编译方式安装Vim的步骤介绍
以上就是在Ubuntu环境下以源码编译方式安装Vim的全部步骤。就像煮一杯咖啡,虽然过程中需要耐心和一些技巧,但等到你熟悉之后,你会发现,不仅可以定制自己喜欢的口味,过程中的乐趣也是不能忽视的。希望你在编译安装Vim的过程中,能体验到这份乐趣。
561 21
|
9月前
|
Ubuntu 开发工具
Ubuntu 22.04 aarch64版本操作系统下编译ZLMediaKit教程
通过上述步骤,你可以在Ubuntu 22.04 aarch64版本上成功编译ZLMediaKit,这是一个相对简单而直接的过程,但可能会遇到一些需要根据具体系统环境和要求调整的地方。
1091 0
|
12月前
|
Ubuntu Windows
处理ubuntu启动过程中报错error:proc_thermal_add错误的方法
了解以上方法,就像寻找鬼屋出口的吊灯,当初见“error:proc_thermal_add错误”时的恐惧不翼而飞。各位Ubuntu使用者都是勇敢的探险家,遇到的问题无非是丛林中的野兽,尝试、努力和坚持总能找到解决的办法。
316 21
|
Ubuntu PHP
Ubuntu下使用apt为Apache2编译PHP7.1
以上就是在Ubuntu系统下,使用apt为Apache2编译PHP7.1的过程。希望这个过程对你有所帮助,如果你在执行过程中遇到任何问题,都可以在网上找到相关的解决方案。
287 25
|
Ubuntu 开发工具 C语言
Ubuntu环境下的Samba源码编译
以上就是在Ubuntu环境下编译Samba源码的步骤。希望这个指南能帮助你成功地从源码编译Samba。如果你在编译过程中遇到任何问题,你可以查阅Samba的官方文档,或者在网上搜索相关的教程和解决方案。
421 23
|
Ubuntu 编译器 开发工具
基于Ubuntu Server的YTM32 SDK工程编译
希望这个“烹饪”比喻能帮助你理解SDK工程编译的过程。记住,编程就像烹饪一样,需要耐心,实践,和不断的学习。祝你烹饪愉快!
238 21
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
4398 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解