内容转载自我的博客

前言

如果你只是想要使用C++或者Python语言来调用OpenCV,而且并不关心OpenCV是否为最新版本,那么请直接按照如下代码:

sudo apt update && sudo apt install libopencv-dev python3-opencv

前者libopencv-dev是用于C++开发的库(已经很老旧了)

后者python3-opencv是用于python3开发的库,你可以在终端输入

/usr/bin/python3 -c "import cv2;print(cv2.__version__)"来验证python3-opencv是否安装成功

/usr/bin/pip3 install opencv-contrib-python==3.4.2.17来安装扩展功能(3.4.2版本以后的预编译库中都不会再加入non-free模块)

1. 下载源码

在官方网站下载最新源代码(截止本文测试时,最新版本为4.4.0),如果需要使用SIFT算法等扩展功能,下载opencv_contrib一起编译:

例如,opencv 4.4源码解压到当前目录下,opencv_contrib 4.4也解压到当前目录下

2. 安装各种依赖

按照如下步骤:

  1. # 安装系统依赖
  2. sudo apt install build-essential cmake git libgtk2.0-dev \
  3. pkg-config libavcodec-dev libavformat-dev libswscale-dev \
  4. libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev \
  5. libjasper-dev libdc1394-22-dev
  6. # 添加源以继续安装依赖libjasper
  7. sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
  8. # 安装系统依赖
  9. sudo apt install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev \
  10. libjasper-dev libdc1394-22-dev libsnappy-dev libboost-all-dev \
  11. python3-dev python3-numpy ffmpeg cmake-qt-gui libopenblas-dev \
  12. tesseract-ocr libtesseract-dev libprotobuf-dev libleveldb-dev \
  13. libhdf5-serial-dev protobuf-compiler libatlas-base-dev \
  14. libgflags-dev libgoogle-glog-dev liblmdb-dev libfaac-dev \
  15. gfortran libgstreamer1.0-dev libatlas-base-dev libxvidcore-dev \
  16. libpng-dev libopenexr-dev libtiff-dev libwebp-dev \
  17. libmp3lame-dev libtheora-dev libvorbis-dev \
  18. libopencore-amrwb-dev x264 v4l-utils libgdk-pixbuf2.0-dev \
  19. manpages-dev libopencore-amrnb-dev libgstreamer-plugins-base1.0-dev \
  20. libqt5widgets5 libqt5gui5 libqt5dbus5 libqt5network5 libqt5core5a \
  21. qtcreator qt5-default
  22. # 修复可能安装出错的依赖
  23. sudo apt install -f

3. 开始编译安装

按照以下步骤:

  1. # 在opencv4.4源码解压后的文件夹下面,创建编译文件夹
  2. mkdir build && cd build
  3. # 配置编译选项
  4. # CMAKE_INSTALL_PREFIX 是最终OpenCV的安装位置
  5. # OPENCV_ENABLE_NONFREE 指示是否开启Non-free的算法
  6. # OPENCV_EXTRA_MODULES_PATH 指示扩展算法的源码文件夹
  7. # WITH_CUDA 该选项需要确保自己已安装显卡驱动和cuda
  8. # 可以关注下命令的输出,可以从中找到哪些模块没有配置成功
  9. cmake -D CMAKE_BUILD_TYPE=RELEASE \
  10. -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4.4 \
  11. -D OPENCV_ENABLE_NONFREE=ON \
  12. -D OPENCV_EXTRA_MODULES_PATH=/home/zfb/opencv_contrib-4.4.0/modules \
  13. -D OPENCV_GENERATE_PKGCONFIG=YES \
  14. -D WITH_QT=ON \
  15. -D WITH_OPENGL=ON \
  16. -D WITH_CUDA=ON \
  17. -D BUILD_EXAMPLES=ON \
  18. -D INSTALL_PYTHON_EXAMPLES=ON \
  19. -D INSTALL_C_EXAMPLES=ON ..
  20. # 开启12个线程同时编译源码
  21. make -j12
  22. # 安装OpenCV到指定位置
  23. sudo make install

4. 配置C++开发环境

按照以下步骤:

  1. # 查看该文件是否存在(OPENCV_GENERATE_PKGCONFIG=YES参数保证此文件存在)
  2. cat /usr/local/opencv4/lib/pkgconfig/opencv4.pc
  3. # 把上面的文件添加到PKG_CONFIG_PATH
  4. sudo vim /etc/profile.d/pkgconfig.sh
  5. # 文件内容如下
  6. # export PKG_CONFIG_PATH=/usr/local/opencv4/lib/pkgconfig:$PKG_CONFIG_PATH
  7. # 激活文件
  8. source /etc/profile
  9. # 验证配置,如果不报错则说明正常
  10. pkg-config --libs opencv4

5. 程序执行时加载动态库*.so

按照以下步骤:

  1. # 将OpenCV的库添加到路径
  2. sudo vim /etc/ld.so.conf.d/opencv4.conf
  3. # 添加内容如下(也可能是空文件)
  4. # /usr/local/opencv4.4/lib
  5. # 更新配置
  6. sudo ldconfig

6. 测试cpp文件

按照以下步骤:

  1. # 进入下载的opencv4.4的源码文件夹下的samples目录
  2. cd samples/cpp/example_cmake
  3. # 配置编译选项
  4. cmake .
  5. # 开始编译文件
  6. make
  7. # 执行测试代码,弹出窗口实时显示摄像头画面
  8. ./opencv_example

7. 配置python3的opencv环境

首先需要找到编译好的用于python3的动态库文件的位置,可以使用如下代码搜索(其实在sudo make install时也会显示):

sudo find / -iname "cv2*.so"

得到路径为/usr/local/opencv4.4/lib/python3.8/dist-packages/cv2/python-3.8/cv2.cpython-38-x86_64-linux-gnu.so

然后把它复制到对应python解释器的/path/to/dist-packages(系统自带的python解释器)和/path/to/site-packages(用户安装的python解释器)目录下,之后就能在该python解释器中使用python-opencv库:

  1. # 查看系统Python环境的包路径
  2. /usr/bin/python3 -c "import pip;print(pip)"
  3. # 创建软链接使得/usr/bin/python3可以使用opencv
  4. sudo ln -s /usr/local/opencv4.4/lib/python3.8/dist-packages/cv2/python-3.8/cv2.cpython-38-x86_64-linux-gnu.so /usr/lib/python3/dist-packages/cv2.so
  5. # 测试安装结果
  6. /usr/bin/python3 -c "import cv2;print(cv2.__version__)"

8. 卸载编译安装的OpenCV

  1. 进入编译时的文件夹cd build
  2. 执行卸载命令sudo make uninstall,此命令会删除安装时添加的所有文件,但是不处理文件夹
  3. 根据上一个命令的回显,删除目的文件夹的与该软件有关的空文件夹

ubuntu系统编译安装OpenCV 4.4的更多相关文章

  1. 使用Ubuntu系统编译安装Zabbix企业级监控系统

    使用Ubuntu系统编译安装Zabbix企业级监控系统   作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Ubuntu系统部署笔记:https://www.cnblogs.com/ ...

  2. Ubuntu下编译安装OpenCV 2.4.7并读取摄像头[转]

    主要参考: 1.http://www.ozbotz.org/opencv-installation/ 2.http://www.ozbotz.org/opencv-install-troublesho ...

  3. Ubuntu下编译安装OpenCV 2.4.7并读取摄像头

    主要参考: 1.http://www.ozbotz.org/opencv-installation/ 2.http://www.ozbotz.org/opencv-install-troublesho ...

  4. 树莓派的Respbian或者ubuntu系统下安装opencv最有效的方法

    第一种方法当然首选和其他安装包相同的方法pip install opencv-python安装失败后果断选择第二种方法,这第二种方法尝试过很多次了,屡试不爽 第二种方法:sudo apt-get in ...

  5. Ubuntu系统---编译opencv程序的几种方式g++、Makefile、Cmake

    Ubuntu系统---编译opencv程序的几种方式g++.Makefile.Cmake 先建立一个工程(一个文件夹),写好xxx.cpp文件,可以是多个: //----------opencv.cp ...

  6. 在Ubuntu 16.04 LTS下编译安装OpenCV 4.1.1

    目录 一 安装前的准备 二 编译并安装OpenCV 4.1.1 注:原创不易,转载请务必注明原作者和出处,感谢支持! OpenCV目前(2019-8-1)的最新版本为4.1.1.本文将介绍如何在Ubu ...

  7. [笔记] Ubuntu 18.04源码编译安装OpenCV 4.0流程

    标准常规安装方法安装的OpenCV版本比较低,想尝鲜使用4.0版本,只好源码安装. 安装环境 OS:Ubuntu 18.04 64 bit 显卡:NVidia GTX 1080 CUDA:10.0 c ...

  8. linux源码编译安装OpenCV

    为了尽可能保证OpenCV的特性,使用OpenCV源码编译安装在linux上.先从安装其依赖项开始,以ubuntu 14.04.X为例讲解在Linux上源码编译安装OpenCV,其他linux版本可以 ...

  9. linux源代码编译安装OpenCV

    为了尽可能保证OpenCV的特性,使用OpenCV源代码编译安装在linux上.先从安装其依赖项開始,以ubuntu 14.04.X为例解说在Linux上源代码编译安装OpenCV,其它linux版本 ...

随机推荐

  1. how to share UI components

    how to share UI components The shared component cloud · Bit https://bit.dev/ A better way to build w ...

  2. base 64 bug & encodeURIComponent

    base64 bug & encodeURIComponent window.btoa("jëh²H¶�%28"); // "autoskiptoclMjiu&q ...

  3. ES2019 features & ES-Next

    ES2019 features & ES-Next https://github.com/tc39/proposals Object.fromEntries(), trimStart(), t ...

  4. Java并发包源码学习系列:线程池ScheduledThreadPoolExecutor源码解析

    目录 ScheduledThreadPoolExecutor概述 类图结构 ScheduledExecutorService ScheduledFutureTask FutureTask schedu ...

  5. Linux下部署Apache+PHP

    Linux下部署Apache+PHP 编辑于2021-02-19 本文中Apache配置文件目录为/etc/httpd/conf/httpd.conf,PHP安装目录为/usr/local/php 一 ...

  6. WLAN-AC+AP射频一劳永逸的调优方式

    AP射频调优组网图 射频调优简介 射频调优的主要功能就是动态调整AP的信道和功率,可以使同一AC管理的各AP的信道和功率保持相对平衡,保证AP工作在最佳状态.WLAN网络中,AP的工作状态会受到周围环 ...

  7. C++算法代码——你要乘坐的飞碟在这里[usaco]

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1056 题目描述 一个众所周知的事实,在每一慧星后面是一个不明飞行物UFO. 这些不明 ...

  8. 系统错误,MSVCP100D.dll找不到或丢失!

    文章首发 | 公众号:lunvey 今日研究c++,找了一些示例程序,发现无法打开.弹出如下的报错提示: 作为新时代人类,遇见问题第一件事情就是问度娘.然而眼花缭乱的检索数据,大家众说纷纭,不知道如何 ...

  9. AdoptOpenJDK是什么?

    要搞清楚AdoptOpenJDK是什么,前提条件是我们需要知道JDK是什么,OpenJDK是什么.明白了JDK和OpenJDK的关系,会容易明白什么是AdoptOpenJDK. JDK是什么? 首先, ...

  10. Jquery hover鼠标经过时弹出div动态提示语

    一.效果图 二.需求描述 1.鼠标经过table每一行时,弹出div动态提示语: 2.div弹出层的位置随鼠标位置的变化而变化: 3.鼠标离开table或获取的动态提示语为空时,div弹出层消失. 下 ...