电脑环境:
1、ubuntu 20.04
2、opencv 4.11
3、opencv_contrilb 4.11
一、OpenCV 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
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
下载下来,如何指定本机电脑具体的位置中。此处我填写的我本机的绝对路径。
D WITH_GSTREAMER=ON
:启用 GStreamer 支持,以便 OpenCV 可以读取和写入 GStreamer流。
这些参数可以根据您的需求进行调整,例如如果您不需要Python支持,可以禁用相关参数。
文章参考链接:
developer.ridgerun.com/wiki/index.…
5、cmake 结果
反正此处的结果我建议是截图保存一下,方便后面用到~
四、make & make install ,此处有坑
1、sudo make -j8
执行完上述过程后,在原来的目录上执行 sudo make -j8
,后面这个 -j8 参数,一般是指定make任务过程的处理器个数,一般编译的快,5分钟就搞定啦~ (虚拟机贼慢把慢,当然也是我分配的处理器少)此处过程有坑,后续慢慢道来吧~
编译过程中一般来说只需要注意 error
的日志输出
2、出现错误1,缺少 boostdesc_bgm.i 文件
此处问题大都出现在 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
咱就是说~ 好人一生平安,一胎八个~
再次回到 build,重新执行 make 命令,你以为会成功是吧,做梦吧,我也想成功勒
3、出现错误2,缺少 features2d/test/test_detectors_regression.impl.hpp
出现了这个错误,但是这个错误,还能在 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中找了个最简单的,好像能解决问题的方式来尝试啦一下,我是成功了,但其他的,我也很难说。
cp -r ~/opencv/modules/features2d ~/opencv/build
请根据自己目录进行合适的修改
我的目录结构如下图,执行结果也如下图:
然后再次重新执行 sudo make -j8
4、sudo make successful
最后的日志输出,出现类似下图的结果则表示 build 成功啦
5、sudo make install
出现下图就是成功啦
默认位置安装,则会安装到系统如下目录:
- /usr/local/bin
- /usr/local/lib
- /usr/local/share
bin下的可执行文件:
lib是库文件,主要是以libopencv开头的so文件、文件夹:pkgconfig、python2.x、python3.x(pkgconfig里存放的是opencv.pc);share里就两个文件夹:OpenCV和licenses 安装好还需要进行配置,见后文。
五、使用前的准备和检查是否安装成功
5.1、动态链接
重新載入動態連結,
sudo ldconfig -v
这里的 -v 参数就是将相关信息输出到屏幕上,不想看可以直接去掉 -v 参数。
5.2、检查版本信息
1、使用 pkg-config
查詢已安裝的 opencv 版本
pkg-config opencv4 --modversion
opencv4.1.1
2、使用 opencv_version
指令查詢已安裝 opencv 的版本。
opencv_version4.1.1
这个命令我也不知道咋,其他两个都是正常的,这个看到的就是 4.2.0 版本
3、使用python3 命令
import cv2 as cv
print(cv.__version__)
输出opencv的版本就是正确的,如果这里不能够正常使用,比如那种找不到 cv2 模块,那么就需要去配置一下环境变量
5.3、配置环境变量
有时候编译成功啦,c++ Demo 也能跑,也能正常调用 opencv ,但是进入到 python 环境,import cv2 就会爆找不到包,或者是其他的问题。 那么可以尝试去配置一下环境变量。让python 去找到相应的包。
我们编译时,采用的默认的安装路径,所以生成的cv2模块路径是:
我的电脑是: /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
执行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 *
删除源码包内所有文件。
后语
反正目前就这样啦,这周末就躺平在家玩了双系统,简单搭建了一下开发环境,后面应该还会输出几篇类似的基础的文章吧。
也是我这个小趴菜的踩坑之旅~