ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

OpenCV 4.5.1 在 Ubuntu 18下的安装详解

2021-01-16 12:59:40  阅读:637  来源: 互联网

标签:4.5 OpenCV 18 sudo dev 编译 opencv conf etc


1. 下载源代码

首先下载源代码,官网下载比较费时,搞了三天都没下来,在 CSDN 上找了一下资源解决此问题。

2. 把源代码复制到和是目录

因为支持 cmake,所以这个过程反而不复杂。在 home 目录建了个文件夹 opencv ,代码拷贝近来,这个文件夹的位置并不重要,因为后面有一个安装步骤,可以把将来开发需要的头文件、编译好的库文件等安装到各自的部署文件夹中。

3. 安装 ubuntu 需要的功能

具体过程我参考了网上的介绍,过程如下。

下面的三条命令,是安装 ubuntu 操作系统需要的功能。如果你的系统已经有了,也可以不安装。

$ sudo apt install  build-essential
$ sudo apt install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev  
$ sudo apt install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

第三行中,可能会出现 无法定位软件包libjasper-dev 的错误提示

查阅资料后找到解决方法如下(原文:https://blog.csdn.net/weixin_41053564/article/details/81254410)

$ sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install libjasper1 libjasper-dev

其中 libjasper1 是 libjasper-dev 的依赖包

4. 用 cmake 生成 Makefile

先说明一下 cmake 和 make 这两个命令。

4.1 为什么要编译源代码?

首先很多程序员都有一个困惑,为什么不把 opencv 编译好直接拿过来用? 这样做应该是可以的,而且在 Windows 下开发的时候,我们一直就是这么干的。当年,我们下载一套源代码,费了半天功夫编译成静态库。后来的开发都是基于这套静态库做的。

但是,用编译好的代码也有一些问题。比如说算法迁移到其他环境下,例如英伟达的 TX1、TX2、Nano等,还需要重新编译。另外,opencv也在不断升级,源代码也在不断变化中。一直用编译好的容易造成代码更新太迟缓。

我对 Linux 不熟悉,最近仔细研究了一下,发现 Linux 系统本身就是一个 C/C++ 的开发环境。Linux 自身就提供了 inlude、lib 等目录。所以我感觉,很可能opencv编译过程中,有可能用到 Linux 下的一些代码资源。如果这样的话,在操作系统下重新编译,可能就是必须的了。
cmake 可以大大简化编译 opencv 这个庞大的软件包的过程。
原来我一直对 cmake 有恐惧心理,前几天仔细研究了一下,发现不复杂。cmake 程序利用源代码中的 MakeLists.txt 文件,帮助我们生成 Makefile 文件。

4.2 make 命令

长期在 Visual Studio 环境下工作的程序员,对 make 命令是不熟悉的。实际上 VS 编译的时候,背后也是调用的 make 这样的程序的。 make 程序工作依赖源代码编译文件夹下面的 Makefile 文件。

Makefile 文件主要说明要编译的文件之间的依赖关系,具体包含两个内容:一个是需要那些源代码文件、到哪里去找这些源代码?另一个是需要哪些库文件、到哪里去找这些库文件?

按理说,这个Makefile 文件 opencv 应该实现设计好了,我们在源代码文件夹里运行一下 make 命令就完成了,岂不快在?

实际上,opencv 要面对多种操作系统部署,不同操作系统的编译环境和要安装部署的目标是不一样的。如果 opencv 自己设计 Makefile 文件的话,工作量还是不小的。于是,借用了 cmake 这个工具简化这部分工作。

4.3 cmake 命令

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。

Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 等其他类似系统的区别之处。

4.4 编译

我在源代码文件夹里建了一个 build 文件夹,然后进入这个文件夹。一般来说,需要在这个文件夹里创建 Makefile 文件并运行 make 命令,所有编译过程产生的文件都会在这个文件夹里面。

我尝试了一下,运行下面命令即可完成全部编译(如有需要,前面加上 sudo):

$ cmake ..
$ make

但网上介绍的安装方法,需要带一些参数,我们来看一下

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

如果报错,那么去掉 -D后面的空格再尝试一下,

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..

这之中 , /usr/local 是 OpenCV 的安装路径。

也可以使用多线程进行编译:

sudo make -j3

j 后面的数字是你想要使用的线程数量。开始编译后,等待编译结束,通常要挺长时间。

4.5 安装部署

一般来讲,Makefile 文件设计的时候,允许对 make 命令后面带有参数。基于这个机制,make 命令一般都会支持 install 参数,以便说明编译好的文件安装到何处。

编译结束后,运行下面命令安装部署 opencv:

$ sudo make install 

完成后,OpenCV 就安装好了,接下来要配置 OpenCV 的编译环境 。

5. 配置环境

这部分参考了 https://blog.csdn.net/sandalphon4869/article/details/94398876#3launchjson_144

ubuntu下的配置文件放在etc文件夹下,详见Linux五大文件系统。这个 etc 文件夹就相当于 Windows 的注册表。opencv的注册内容就保存在/etc/ld.so.conf.d/opencv.conf 文件夹内。那么为什么opencv要把配置的内容放到这里呢?

在了解/etc/ld.so.conf.d/目录下文件的作用之前,先介绍下程序运行时加载动态库的几种方法:

第一种,通过ldconfig命令
ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表。
.
这里面涉及到的关键内容有命令:ldconfig,配置文件目录:/etc/ld.so.conf.d,配置文件在/etc/ld.so.conf内容由用户编辑,缓冲文件/etc/ld.so.cache。
.
下面举个例子,比如你在部署软件时,有些动态库安装在exe目录下,可以通过如下方法实现,
1)配置exe.conf文件,里面加一行~/exe,然后将该文件放到/etc/ld.so.conf.d目录下;
2)在/etc/ld.so.conf文件中增加一行 include ld.so.conf.d/exe.conf
3)执行 ldconfig命令
之后程序运行时,会自动增加在exe目录中搜索动态库。
.
第二种,通过LD_LIBRARY_PATH环境变量
可以通过在.bashrc或者.cshrc中配置该环境变量,LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库。可以设置多个搜索目录, 这些目录之间用冒号分隔开。 同样是上面的例子,可以通过以上的方法来实现。
.
在.bashrc或.cshrc中增加一行,
export LD_LIBRARY_PATH=~/exe:$LD_LIBRARY_PATH
即可。
.
第三种,通过编译选项-Wl, -rpath指定动态搜索的路径
-Wl选项告诉编译器将后面的参数传递给链接器。
.
通过上面的介绍,对/etc/ld.so.conf.d/的作用就比较清晰了。

首先将OpenCV的库添加到路径,从而可以让系统找到。打开opencv.conf ,打开后很可能是空白:

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

在文末添加 :

/usr/local/lib

保存后,执行如下命令使得刚才的配置路径生效:

$ sudo ldconfig 

说到这里,大家可能会问,如何找到 opencv.conf 这个配置文件?答案是,/etc/ld.so.conf 这份文件里面给出了opencv.conf 的路径。打开我的机器上的 /etc/ld.so.conf.d ,内容如下:

include /etc/ld.so.conf.d/*.conf
include /usr/loacal/lib

接下来配置 bash:

$ sudo gedit /etc/bash.bashrc  

在文件最末尾添加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH  

保存,执行如下命令使得配置生效:

$ source /etc/bash.bashrc  

然后更新:

$ sudo updatedb 

到这里配置就完成了。

6. 检查安装是否成功

输入下面命令,如果显示版本号则表示安装成功:

$ pkg-config opencv --modversion
4.5.1

7. 总结

罗里罗索说了一大堆,其实安装过程就下面几条命令:

    #安装编译工具:
    sudo apt-get install build-essential

    #安装依赖包:
    sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

    # 安装可选包:
    sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

    # 打开文件夹:
    cd opencv-5.4.1

    # 新建一个文件夹用于存放临时文件:
    mkdir build

    # 切换到该临时文件夹:
    cd build

    # 开始编译:
    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
    make -j10   # 开启线程 按照自己的配置
    sudo make install

    #验证
    pkg-config opencv --modversion

标签:4.5,OpenCV,18,sudo,dev,编译,opencv,conf,etc
来源: https://blog.csdn.net/quicmous/article/details/112694068

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有