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

后语

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

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


目录
相关文章
|
3月前
|
Ubuntu 固态存储 算法框架/工具
ubuntu下编译ssd-caffe遇到的问题汇总
ubuntu下编译ssd-caffe遇到的问题汇总
|
4月前
|
并行计算 Ubuntu Linux
Ubuntu 20.04 Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码
Ubuntu 20.04 Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码
145 0
|
1月前
|
Java Android开发 计算机视觉
报错opencv2:compileDebugJavaWithJavac
报错opencv2:compileDebugJavaWithJavac
17 0
|
3月前
|
Ubuntu C++
百度搜索:蓝易云【Ubuntu下编译OCC教程】
请注意,以上只是概述,并不包含详细的步骤和指令。编译OpenCASCADE是一个复杂的过程,需要有一定的编译和C++编程经验。建议在编译OpenCASCADE之前,先学习相关知识并查阅官方文档和教程,以确保正确编译和使用OpenCASCADE库。
26 0
|
3月前
|
Kubernetes NoSQL Linux
Ubuntu18.04 gRPC编译安装
Ubuntu18.04 gRPC编译安装
|
3月前
|
存储 Ubuntu 开发工具
ffmpeg笔记(二)windows下和ubuntu-16.04下ffmpeg编译
ffmpeg笔记(二)windows下和ubuntu-16.04下ffmpeg编译
|
4月前
|
Ubuntu 计算机视觉
百度搜索:蓝易云【ubuntu下简单编译opencv教程。】
通过按照以上步骤进行,你应该能够成功在Ubuntu系统下编译和安装OpenCV。请注意,具体的步骤可能会因系统版本和OpenCV版本而有所不同。如果遇到任何问题,可以查阅OpenCV官方文档或社区寻求更多帮助。
31 0
|
4月前
|
人工智能 并行计算 Ubuntu
极智AI | ubuntu编译Darknet与YOLO训练
大家好,我是极智视界,本文介绍了在 ubuntu 上编译 darknet 及 yolo 训练的方法。
62 0
|
5天前
|
Ubuntu Linux Python
Linux(15)Ubuntu安装ninja构建工具
Linux(15)Ubuntu安装ninja构建工具
16 0
|
5天前
|
Ubuntu Linux 数据安全/隐私保护
Linux(7)Ubuntu20.04 arm64安装Docker
Linux(7)Ubuntu20.04 arm64安装Docker
20 0