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

后语

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

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


目录
相关文章
|
1月前
|
并行计算 PyTorch TensorFlow
Ubuntu安装笔记(一):安装显卡驱动、cuda/cudnn、Anaconda、Pytorch、Tensorflow、Opencv、Visdom、FFMPEG、卸载一些不必要的预装软件
这篇文章是关于如何在Ubuntu操作系统上安装显卡驱动、CUDA、CUDNN、Anaconda、PyTorch、TensorFlow、OpenCV、FFMPEG以及卸载不必要的预装软件的详细指南。
3356 3
|
1月前
|
缓存 并行计算 Ubuntu
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
本文是关于在Jetson AGX Xavier上编译FFmpeg(3.4.1)和OpenCV(3.4.0)的详细教程,包括编译需求、步骤、测试和可能遇到的问题及其解决方案。还提供了Jetson AGX Xavier编译CUDA版本的OpenCV 4.5.0的相关信息。
62 4
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
|
1月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
141 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
1月前
|
Ubuntu Linux C语言
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
本文介绍了在Ubuntu 18.04系统上编译安装OpenCV 3.4.0及其扩展包opencv_contrib 3.4.0的详细步骤,包括下载源码、安装依赖、配置CMake和编译安装,以及常见问题的解决方法。
85 1
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
|
1月前
|
PyTorch TensorFlow 算法框架/工具
Jetson环境安装(一):Ubuntu18.04安装pytorch、opencv、onnx、tensorflow、setuptools、pycuda....
本文提供了在Ubuntu 18.04操作系统的NVIDIA Jetson平台上安装深度学习和计算机视觉相关库的详细步骤,包括PyTorch、OpenCV、ONNX、TensorFlow等。
44 1
Jetson环境安装(一):Ubuntu18.04安装pytorch、opencv、onnx、tensorflow、setuptools、pycuda....
|
24天前
|
Ubuntu 编译器 计算机视觉
Ubuntu系统编译OpenCV4.8源码
【10月更文挑战第17天】只要三步即可搞定,第一步是下载指定版本的源码包;第二步是安装OpenCV4.8编译需要的编译器与第三方库支持;第三步就是编译OpenCV源码包生成安装文件并安装。
|
1月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
272 3
|
1月前
|
Ubuntu 编译器 开发工具
香橙派5Pro+虚拟机Ubuntu18.04交叉编译+Opencv4.7
香橙派5Pro+虚拟机Ubuntu18.04交叉编译+Opencv4.7
|
1月前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
2月前
|
计算机视觉
vs2019_qt6.2.4_dcmtk3.6.7_vtk9.2.2_itk5.3_opencv4.6.0编译记录
这篇文章记录了使用VS2019编译Qt6.2.4、DCMTK3.6.7、VTK9.2.2、ITK5.3和OpenCV4.6.0的过程,包括下载和编译步骤,并提供了遇到编译错误时的解决方案和参考链接。
vs2019_qt6.2.4_dcmtk3.6.7_vtk9.2.2_itk5.3_opencv4.6.0编译记录