之前在Windows上借助VS编译opencv,很轻松就能搞定,到Linux下踩了坑,Ubuntu下编译、卸掉重编、搞了几次,还把系统库给卸载掉了(sudo apt-get remove python3.6千万不要尝试).....如果你也通过卸载python2.x、python3.x把系统搞挂了,没有了桌面,千万不要慌~首先,卸载了就搞干净点:sudo apt-get autoremove,然后,安装一个全新的Ubuntu桌面,sudo apt-get install ubuntu-desktop,最后你会发现,有惊无险,桌面回来了!!!

下面回到正题:Ubuntu18.04安装opencv-3.4.x(5.6.8都试过,没问题)

原文转载自:语雀文档 ,样式更好看:)


1 源码下载

官网:https://opencv.org/releases/ Github:https://github.com/opencv/opencv 随便从哪下载,都可以

2. apt-get安装

Ubuntu下,OpenCV的安装方式有两种:

  • 1.通过apt-get 安装opencv-python
  • 2.从源码构建

方式1.很简单:直接$ sudo apt-get install python-opencv 如果你只是在python中简单使用opencv,首选此种方式安装,如果你需要在其他项目中编译引用opencv,建议从源码构建安装;还有一点:python-opencv里的代码可能没有源码更新的及时,从源码构建虽然复杂,不过稳定些、可控性更强。下文主要介绍通过源码构建安装OpenCV,系统及版本:Ubuntu18.04 + Opencv3.4.8。

3 从源码安装

从源码编译安装的方式又有两种:

  • 默认位置安装
  • 自定义位置安装

推荐默认位置安装,安装后可执行文件和lib文件都会安装到系统相应路径,方便使用。自定义位置安装则需要自己设置环境变量和其他的设置。如果只是简单应用,不是对opencv各个版本有使用区分,建议直接默认位置安装。 不论是默认安装还是自定义位置、安装前都需要安装一些构建必须的依赖项。

3.1 构建依赖项

安装前需要下载一些必须的依赖项。 不同版本opencv依赖会有不同,具体见官网,下面的依赖项适用于opencv-3.4.8

官网:https://docs.opencv.org/3.4.8/d2/de6/tutorial_py_setup_in_ubuntu.html

1.cmake gcc g++ 通常系统都有,可以cmake(gcc/g++) --version查看其版本:

有的话无需安装,否则可以执行如下命令安装:

sudo apt-get install cmake
sudo apt-get install gcc g++

2.安装python2、python3支持模块

可选、譬如你可以只打算在python3里用opencv,那么就忽略python2的模块安装。

# 安装python2支持
sudo apt-get install python-dev python-numpy
# 安装python3支持
sudo apt-get install python3-dev python3-numpy

3.GTK支持(图形界面库)

# 安装gtk2支持
sudo apt-get install libgtk2.0-dev
# 安装gtk3支持
sudo apt-get install libgtk-3-dev

4.可选图片支持库

用于处理多种图片格式(可选)

sudo apt-get install libpng-dev
sudo apt-get install libjpeg-dev
sudo apt-get install libopenexr-dev
sudo apt-get install libtiff-dev
sudo apt-get install libwebp-d

5.下载ippcv

cmake时会自动下载ippcv,如果不翻墙可能速度过慢,导致cmake一直卡在那,解决方法:下载压缩包 ippicv_2019_lnx_intel64_general_20180723.tgz 放在opencv源码主目录/3rdparty/ippicv/下,同时修改统计目录下的ippicv.cmake,把47行的下载链接换成本地文件:file: ROOT_DIR/3rdparty/ippicv/ippicv_2019_lnx_intel64_general_20180723.tgz

3.2 默认位置安装

git clone或官网下载的压缩包解压后得到opencv源码包,切换到源码主目录

# 新建build文件夹,存放构建文件
$ mkdir build
$ cd build

执行cmake,构建CMakeLists.txt自动化创建makefile,cmake需要之前可以指定一些构建参数,用来确定安装位置、是否为python2/python3执行安装等、构建的类型是否是release等,如果不指定参数,直接傻瓜式cmake也是可以的。

# 傻瓜式cmake
cmake ../
# 带参数cmake 默认位置安装
cmake ../ -DWITH_CUDA=OFF  -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON  -DBUILD_DOCS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF
# 带参数cmake 自定义位置安装
cmake ../ -DWITH_CUDA=OFF -DCMAKE_INSTALL_PREFIX=/usr/local/opencv/opencv-3.4.8 -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON  -DBUILD_DOCS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF

注意,-D是cmake执行时指定的参数 CMAKE_INSTALL_PREFIX是默认安装路径前缀,如不指定,默认是/usr/local,也可以指定自定义文件夹(见下面的【自定义安装】);WITH_CUDA默认是开启的,如果不指定OFF则opencv编译时会默认使用可用的CUDA,虽然速度会提升,不过可能会和其他使用cuda的深度学习框架有冲突,建议根据opencv实际使用情况来决定是否开启CUDA加速!CMAKE_BUILD_TYPE可以根据需要选择DEBUG或RELEASE。

cmake选项设置参考:
https://docs.opencv.org/3.4/d7/d9f/tutorial_linux_install.html http://amritamaz.net/blog/opencv-config

cmake主要是用于生产Makefile的,正式的构建还没开始,执行make -j8构建

# 执行make编译,-j8参数表示允许cpu并行编译,最多允许8个线程,可以大大加速构建过程
# -j根据自己cpu核心数设定,6核可以设为-j6~-j12
make -j8

构建过程耗时几分钟,完成后,需要make install将编译生成的可执行文件和lib文件等,安装到系统相应目录。

# 安装编译好的可执行文件
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 安装好还需要进行配置,见下面【配置】一节

3.3 自定义位置安装

自定义位置安装,前面的步骤都和默认安装一致,主要是cmake时需要指定编译参数-DCMAKE_INSTALL_PREFIX为自己指定的目录,然后增加相应的设置:主要是置扫描路径和设置环境变量

自定义安装,执行sudo make install后,会安装到自定义目录的相应位置,譬如,我自定义目录: /usr/local/opencv/opencv-3.4.8,下文用OPENCV_DIR_PATH代表。则安装到以下位置:

  • /usr/local/opencv/opencv-3.4.8/bin
  • /usr/local/opencv/opencv-3.4.8/lib
  • /usr/local/opencv/opencv-3.4.8/share

3.3.1 设置扫描路径

设置扫描路径,这块主要针对自定义位置安装,项目编译后产生的可执行文件、库文件、头文件需要被别的项目引用,扫描路径怎么设置?也有两种方式:

  • 1.复制opencv.pc至系统pkgconfig文件夹中
  • 2.将opencv.pc所在目录设定到环境变量PKG_CONFIG_PATH

OpenCV编译后会在/OPENCV_DIR_PATH/lib/pkgconfig/下产生opencv.pc文件,里面定义了这些路径变量:

prefix定义了编译安装的主目录;exec_prefix则是可执行文件目录;然后还有include文件夹目录等等。

通过/usr/bin/下的pkg-config命令,会扫描所有系统/usr/lib/下和环境变量PKG_CONFIG_PATH所定义的所有pkgconfig文件夹,这些文件夹都是存放各个程序编译信息.pc文件,pkg-config扫描后,这些.pc文件保存的编译信息就能被其他项目/程序获取。(.pc文件主要定义了安装程序的主目录prefix、可执行程序目录exec_prefix、lib目录libdir、包含目录includedir、sharedlibdir等,有点类似于环境变量,不过更多是为了程序编译服务的)

# 查看所有系统将会扫描的pkgconfig文件夹路径;
pkg-config --variable pc_path pkg-config
#根据opencv.pc查看其有那些路径变量
pkg-config --print-variables opencv
#查看opencv.pc中prefix变量的值(即其编译安装的位置)
pkg-config --variable prefix opencv

自定义安装,我们会在/OPENCV_DIR_PATH/lib/pkgconfig/下发现opencv.pc。于是我们有两种选择: 1.复制opencv.pc至系统pkgconfig文件夹中 理论上可以将opencv.pc复制到任意一个 pkg-config --variable pc_path pkg-config 列出的pkgconfig文件夹中,不过最好复制到/usr/local/lib/pkgconfig/下。 例:

cd /OPENCV_DIR_PATH/lib/pkgconfig
sudo cp opencv.pc  /usr/local/lib/pkgconfig

Ubuntu18.04安装后,系统自带了opencv3.2.0,默认将opencv.pc存放在/usr/lib/x86_64-linux-gnu/pkgconfig/下,如果需要将opencv.pc复制到这里,可以先将系统自带的opencv.pc备份下,然后再cp过去。 2.将opencv.pc所在目录设定到环境变量PKG_CONFIG_PATH

#修改bash.bashrc文件
sudo vim /etc/bash.bashrc
# 在最后加入:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/OPENCV_DIR_PATH/lib/pkgconfig
export PKG_CONFIG_PATH
source /etc/bash.bashrc
#查看变量是否生效
echo $PKG_CONFIG_PATH

3.3.2 设置环境变量

这里有两块:

1.设置OpenCV的环境变量(可选,不建议) 如果编译时默认安装的位置是系统bin和lib文件夹、所以可执行文件和lib文件都可以立即执行。譬如:opencv_version这个可执行程序,由于其路径属于系统路径:usr/bin/opencv_version,故可以在任意shell窗口中直接运行,自定义位置安装的则不可以。故可以为其设置环境变量,不过通常也不需要,原因有两点:1.opencv的可执行命令较少2.通常我们编译OpenCV并不是为了得到其可执行文件,而是为了得到lib文件夹中的.so库文件,供其他程序/项目直接引用。

2.设置Python的cv2包的环境变量(必须) 自定义位置编译时,可能会出现一种情况,编译成功安装成功,OpenCV的c++demo也可以正常运行,但是进入python环境import cv2时会发现找不到包。因为自定义编译时,生成的cv2模块路径是: /OPENCV_DIR_PATH/lib/python3.6/dist-packages 需要将此路径设置加入环境变量PYTHONPATH中,以便于python环境中import时可以找到cv2。

# 新增PYTHONPATH环境变量
sudo vim ~/.bashrc
export PYTHONPATH=$PYTHONPATH:/OPENCV_DIR_PATH//lib/python3.6/dist-packages
#如:export PYTHONPATH=$PYTHONPATH:/usr/local/opencv/opencv-3.4.8/lib/python3.6/dist-packages
source ~/.bashrc

然后,我们就可以正常在python环境中import cv2了。

安装好还需要进行配置,见下面【配置】一节

4. 配置

主要是将opencv的lib路径添加到配置,能被系统扫描到,有什么用?其他项目,如darknet构建时需要用到opencv的lib,就可以直接引用到。

sudo gedit /etc/ld.so.conf.d/opencv.conf

将你opencv安装目录/lib路径写入opencv.conf,并保存。如果你编译时是默认安装,路径是: /usr/local/lib。

保存后刷新,使配置生效

#刷新lib库目录
sudo ldconfig
#刷新目录缓存
sudo /sbin/ldconfig

有的教程写的是:编辑/etc/ld.so.conf,在最后加入 include /usr/local/lib,效果一样

5. 验证

查看版本

方式一:shell中直接查看

pkg-config opencv --modversion

方式二:python中查看

>>>import cv2;

>>>cv2.__version_``_

Python dmeo

import cv2 as cv
img = cv.imread('/home/lyon/Desktop/helloworld.jpg',1)
cv.imshow('Image',img)
cv.waitKey(0)

效果:桌面弹出一个图片框:

C++ demo

找到你的opencv源码包,假如是opencv-3.4.8,cd到opencv-3.4.8/samples/cpp/example_cmake/下执行官方给出的demo,需要执行cmake和make来编译cpp文件:

cmake .
make
./opencv_example

执行demo会调用打开Sample窗口,并调用你本地摄像头显示画面,没有摄像头画面如下:

如果你是自定义路径安装的,请注意一下: 看一下CmakeLists.txt的内容:

注释中表示,你需要设置变量OpenCV_DIR来找到OpenCVConfig.cmake文件的位置。通常如果你是执行默认位置安装,那么系统默认路径为:/usr/share/OpenCV/OpenCVConfig.cmake。如果你是自定义位置安装,需要通过在CmakeLists.txt中设置OpenCV_DIR变量的路径,来定位到你的Opencv目录,譬如:

set(OpenCV_DIR /usr/local/opencv/opencv-3.4.8/share/OpenCV/)

6. 卸载

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

执行sudo make uninstall可将opencv相关的可执行文件、lib文件等从/usr/local/bin/、/usr/local/lib、usr/local/share中删除,不过还是会留空下文件夹,需要手动删除。可以继续执行:sudo make clean 将源码包内的编译相关文件删除、最后在build文件夹内执行sudo rm rf *删除源码包内所有文件。

【CV实战】Ubuntu18.04源码编译安装opencv-3.4.X+测试demo相关推荐

  1. opencv4.0在linux下编译,Ubuntu 18.04源码编译安装OpenCV 4.0步骤

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

  2. Ubuntu 16.04 源码编译安装 uhd gnuradio

    Ubuntu 16.04 源码编译安装 uhd & gnuradio 环境介绍 UHD安装 1 安装依赖 2 编译 3 测试安装结果 4 配置 USB gnuradio安装 1 安装依赖 2 ...

  3. 低CUDA算力显卡用上高版本pytorch(ubuntu18.04源码编译特定版本pytorch(v1.10.0))

    低CUDA算力显卡用上高版本pytorch(ubuntu18.04源码编译特定版本pytorch(v1.10.0)) 一 电脑配置 二 正常情况下源码编译步骤 三 我的编译过程及出现的问题 首先 安装 ...

  4. Ubuntu 16.04源码编译安装Apache 2.4.25教程

    这篇文章主要为大家详细介绍了Ubuntu 16.04源码编译安装Apache 2.4.25,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文为大家介绍了Ubuntu 16.04源码编译安装Apa ...

  5. 如何在ARM开发板上从源码编译安装OpenCV和OpenCV contrib

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文主要介绍如何在ARM开发板上从源码编译安装OpenCV和OpenCV contrib. OpenC ...

  6. opencore0.6.3_Ubuntu 18.04 源码编译安装 PHP 7.3

    记录在Ubuntu 18.04下源码编译安装 PHP 7.3的过程步骤. 0.下载PHP源代码 首先需要从PHP官网下载PHP7.3.1的源代码,保存为php-7.3.1.tar.xz. http:/ ...

  7. x86架构与ARM架构(AGX、TX2、NX等)下配置带ROS插件的QtCreator(Qt+ROS+ubuntu18)(源码编译安装方式)

    在之前的一篇文章里面提到了Qt+ROS+ubuntu18环境的搭建,但是那种方法不适用于arm架构的电脑,原因是x86架构和arm架构的cpu指令集不一样,导致下载下来的可执行文件只能在x86架构运行 ...

  8. Ubuntu 16.04 源码编译安装PHP7.2.23详细过程

    从官网下载源码包 https://www.php.net/downloads.php 打开虚拟机,Ctrl + Alt + T 打开终端 sudo su可以切换超级管理员,不用每次输入命令都带sudo ...

  9. Ubuntu 16.04 源码编译安装GPU tensorflow(二)

    如前一篇在1.4.0版本的Tensorflow上安裝Tensorflow Object Detection API,在验证测试时出現serialized_options=None问题.需安装高版本Te ...

最新文章

  1. css菜单缓慢滑动_如何使用HTML,CSS和JavaScript构建滑动菜单栏
  2. php 字符串转时间戳_php如何将时间字符串转换为时间戳
  3. Java-P: 2_3,类成员具有的控制修饰符
  4. 清除messages
  5. 你不是在拯救世界就是在拯救世界的路上
  6. rsa.FromXmlString 系统找不到指定的文件
  7. 1030 完美数列 (25 分)(c语言)
  8. 用js将form表单同时提交到两个不同页面的方法
  9. LeetCode-697. 数组的度
  10. cad lisp 法兰6_南昌平板法兰加工设备_山东平安数控机械有限公司
  11. qt自定义控件_Qt编写自定义控件60-声音波形图
  12. java检测敏感词,Java实现敏感词检测的代码
  13. CodeBlocks-20.03下载安装及中文教程
  14. ofd发票怎么打开?ofd格式发票转换pdf格式发票的方法
  15. oracle 校验 统一社会信用代码 函数
  16. android手机传感器,安卓手机传感器
  17. Vue 前端显示文件流图片
  18. 【机器学习算法面试题】四.深度神经网络中激活函数有哪些?
  19. 16哈理工新生赛 H 下雪啦 (哈希表)
  20. 对指针的详细认识(一)—— 指针概念+指针类型+野指针+指针运算+二级指针

热门文章

  1. es-head 删除INDEX 创建mapping
  2. c语言作业帮,少训练大功课C语言
  3. 华为认证HCNA-IoT物联网工程师培训视频
  4. android 元素点击位置,appium自动化操作之元素定位点击事件全家桶(find_element_by、find_elements_by)...
  5. centos6.x 安装php5.6 tar,CentOs6.x安装php5.6.x Web程序 - 贪吃蛇学院-专业IT技术平台
  6. Android点击EditText文本框之外任何地方隐藏键盘的解决办法
  7. Linux下如何查看哪些进程占用的CPU内存资源最多
  8. UML和模式应用5:细化阶段(5)---系统顺序图
  9. GO学习笔记 - Go 只有一种循环结构—— for 循环。
  10. Gprinter Android SDK V2.1.4 使用说明