Ubuntu18.04安装OpenCV3

2023-10-27

0. 需要(Science 上网)

1. 环境依赖

sudo apt-get install build-essential  

问题:
build-essential : 依赖: libc6-dev 但是它将不会被安装
或 libc-dev依赖: gcc (>= 4:7.2) 但是它将不会被安装
依赖: g++ (>= 4:7.2) 但是它将不会被安装
依赖: dpkg-dev (>= 1.17.11) 但是它将不会被安装
解决:先检查是否换源,如果没有,先换源,再sudo apt-get update.

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 

出现的问题:libjasper-dev无法安装的问题
解决:

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

2. opencv 3.4.16 下载以及contrib3.4.16付费部分下载

2.1 OpenCV主程序

OpenCV主程序下载地址:
https://opencv.org/releases/
选择source版本
在这里插入图片描述

2.2 Opencv_contrib

下载地址:
https://github.com/opencv/opencv_contrib ,此处操作要注意版本一致:

  • 点击Branch:master
  • 点击Tags
  • 选择3.4.16
    在这里插入图片描述

下载zip压缩包就可以!!!
在这里插入图片描述

3. 整理OpenCV源码文件包

(可以随便放了~,只不过下面cmake 需要填写路径)

3.1 我的路径

在/home/你的名字/ 文件夹下建一个opencv文件夹,并且将下载好的两个文件opencv-3.4.16和opencv_contrib3.4.16复制到 /home/你的名字/opencv
在opencv 文件夹下,新建build文件夹

3.2 付费包

找到并打开opencv-3.4.10 文件夹 目录中的CMakeLists.txt文件,搜索OPENCV_ENABLE_NONFREE变量,将后面OFF更改为ON,并保存,此步的作用是打开付费功能。因为在一些新版本上,SIFT、SURF被申请了专利,不能商用,所以需要打开付费功能才能调用这些申请过专利的程序。

4. cmake

在build文件下,执行4.1代码

4.1 代码

cmake -D CMAKE_INSTALL_PREFIX=/usr/local \
-D CMAKE_BUILD_TYPE=Release \
-D OPENCV_ENABLE_NONFREE:BOOL=ON \
-D OPENCV_EXTRA_MODULES_PATH=/home/lessle6/opencv/opencv_contrib-3.4.16/modules \
../opencv-3.4.16   

4.2 解释

-D CMAKE_BUILD_TYPE=Release 意思是设置build(编译)的类型为“Release”
-D OPENCV_EXTRA_MODULES_PATH=…/opencv_contrib/modules 意思是增加opencv的额外模块路径为“…/opencv_contrib/modules ” 后面是opencv的主程序源码位置

4.3 踩坑

因为contrib 和主程序版本不对,踩了很多坑!!!

contrib如果版本与opencv版本一致,将不会出现以下问题!!!
浅看一下~
在这里插入图片描述

5. make && install

在build文件下,执行:

sudo make -j4
sudo make install  

注意:sudo make -j4, 4的意思是用4核线程并行编译

6. 配置动态链接库

任意文件夹执行以下6.1 代码:

6.1 代码

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

#在opencv.conf里面写入:

/usr/local/lib

执行生效命令:

sudo ldconfig

6.1 解释

opencv是一个第三方的库,我们要引用它需要对系统的环境变量进行配置,找到动态链接库。
/etc/ld.so.conf 此文件记录了编译时使用的动态库的路径,也就是加载so库的路径。so? so文件是Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据。.so一般是linux的动态链接库,相当于windows的.dll。默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,–prefix会默认将库安装在/usr/local目录下(第4步 编译),如果没有在文件/etc/ld.so.conf中添加/usr/local/lib这个目录。那这样的话,虽然安装了源码包,但是使用时仍然找不到相关的.so库,就会报错。也就是说系统不知道安装了源码包。对于此种情况有2种解决办法:
(1)在用源码安装时,用–prefix指定安装路径为/usr/lib(第4步 编译)这样的话也就不用配置PKG_CONFIG_PATH
(2)直接将路径/usr/local/lib路径加入到文件/etc/ld.so.conf文件的中。在文件/etc/ld.so.conf中末尾直接添加:/usr/local/lib)(当前操作)
如果打开终端查看etc文件夹下面包含ld的文件(ls /etc/ | grep ld)
会发现有三个文件:
ld.so.cache (文件)
ld.so.conf (文件)
ld.so.conf.d (目录)
其中ld.so.conf.d是目录类型的文件,他的下面存放这各种.conf文件,我们刚才写的opencv.conf就在这个目录下ld.so.conf是普通文件类型的文件,打开ld.so.conf会发现里面写着:include /etc/ld.so.conf.d/*.conf 这代表将引用ld.so.conf.d目录下的所有.conf文件这样的话,当操作系统加载动态库时,会首先去读取ld.so.conf文件,然后进入ld.so.conf.d目录下,读取里面所有的配置文件,这些配置文件(比如我们刚才new出来的opencv库路径)内记载着库的路径,这样就可以找到动态库了。但是Linux还有一个缓存机制,为了防止在目录下一层层的找库,Linux会建立一个缓存文件,ld.so.cache,这实际上是一个二进制文件,我们可以通过 cat /etc//ld.so.cache 命令,可以看到里面存储着库的目录,这样一来每当Linux要找库时,就会直接读取ld.so.cache文件,而当我们新增加了库时也要使用sudo ldconfig来进行更新。

7.配置OpenCV环境变量

任意文件夹执行以下7.1 代码:

7.1 代码

 sudo gedit /etc/bash.bashrc 

在文件的末尾加入:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig           
export LD_LIBRARY_PATH=/usr/local/lib 

保存后并执行:

source /etc/bash.bashrc

7.2 解释

在6 计算机已经知道动态库的位置,但是还有一个问题,我们在build一个可执行程序的最后一步,是不是要知道动态库的头文件和库文件在哪里,也就是说要知道这个库的依赖,我们才能真正使用动态库。这一步通过PKG_CONFIG_PATH来完成Opencv动态库依赖的库文件和头文件的配置。

7.3 测试头文件库文件

  • 查看opencv头文件:
pkg-config --libs opencv
  • 查看opencv库文件:
pkg-config --cflags opencv

8. 测试OpenCV是否成功

查看现在的OPENCV版本:

pkg-config --modversion opencv 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu18.04安装OpenCV3 的相关文章

随机推荐