Bootstrap

Ubuntu20.04 OpenCV详细安装教程(附多版本切换共存教程)

opencv安装有两种方式:

1.使用包管理器安装预编译版本(安装十分简单,但是版本只有4.2.0,且没有扩展模块且不支持Qt窗口)

2.从源码安装(比较复杂,但是推荐)

1.安装预编译版本

sudo apt install libopencv-dev

这样就安装完成了

这种安装方法,默认把opencv相关文件放置在系统目录

2.从源码构建安装(重点)

1.OpenCV官网下载源码

官网下载地址icon-default.png?t=N7T8https://opencv.org/releases/

如上图所示,选择Sources下载zip源码压缩包,下载完解压,如下图所示:

2.编译安装

安装所需工具

#更新apt可安装包列表
sudo apt update

#安装cmake和g++
sudo apt install -y cmake g++

#安装项目构建工具,有两个选择,make或ninja, ninja自动支持多线程,make得自己加-j选项,这里先全安装上
sudo apt install make ninja-build



使用cmake构建

#进入到源码目录
cd opencv-4.9.0

#cmake构建
cmake -B build -GNinja -DCMAKE_INSTALL_PREFIX=~/lib/opencv4.9.0_install

命令解释:

        -B build :在当前目录创建一个build文件夹,然后构建到build文件夹里

        -GNinja : 指定生成用Ninja来构建的项目,默认是-GUnix(用make构建)

        -DCMAKE_INSTALL_PREFIX=~/lib/opencv4.9.0_install : 指定安装目录,否则默认安装到系统目录:/usr/lib,usr/include,这里是多版本共存的关键,指定一个自定义的目录(最好别是系统目录),比如我就在~/lib/opencv4.9.0_install中

注意:该命令执行过程中可能会连外网下载本地缺失的文件,建议科学上网设置好https代理

cmake命令执行完毕后,build目录多了一大堆文件,如下图所示:

 继续在当前目录,然后执行命令:

cmake --build build/

 正式开始编译! 

编译时间较长,耐心等待......

编译完成后执行命令:

cmake --install build/

执行这个命令,将编译好的库和头文件以及cmake文件复制到之前指定的CMAKE_INSTALL_PREFIX里,如下图所示:

3.设置环境变量,切换版本

使用OpenCV一般搭配cmake来使用,所以选择OpenCV的工作可以通过设置cmake的环境变量实现。

cmake是通过find_package函数来实现查找包功能,而find_package函数又是通过设置的搜索路径来查找对应的库配置文件。具体可查看:cmake:指定find_package的搜索路径_find_package 指定路径-CSDN博客文章浏览阅读1.4w次,点赞12次,收藏24次。find_package(OpenCV PATHS /opt/opencv NO_DEFAULT_PATH REQUIRED)if (OpenCV_FOUND) include_directories(${OpenCV_INCLUDE_DIRS}) message( ${OpenCV_LIBS})else() message("OpenCV not found, so we won't build the project.")en_find_package 指定路径https://blog.csdn.net/zhizhengguan/article/details/115207345

 概括一下就是:

1.可以在CMakeLists.txt文件里设置cmake环境变量

       <PackageName>_ROOT (支持查找子目录,但是需要设置cmp0074策略)或  <PackageName>_DIR(不支持子目录查找,必须指定OpenCVConfig.cmake所在目录)

2.可以在执行cmake命令时添加-D选项指定目录

        CMAKE_PREFIX_PATH 或 CMAKE_FRAMEWORK_PAT或CMAKE_APPBUNDLE_PATH

3.通过系统环境变量Path来搜索 

演示一下:

1.设置<PackageName>_DIR

查看一下OpenCVConfig.cmake文件所在目录:

cmake_minimum_required(VERSION 3.0)

project(Demo)

set(OpenCV_DIR "~/lib/opencv4.9.0_install/lib/cmake/opencv4") #对应上面刚查的目录

find_package(OpenCV 4.9 REQUIRED)
message("find ${OpenCV_VERSION}")

 cmake运行一下,看到输出即可。

2.添加-D选项指定目录

cmake_minimum_required(VERSION 3.0)

project(Demo)

# set(OpenCV_DIR "~/lib/opencv4.9.0_install/lib/cmake/opencv4")

find_package(OpenCV 4.9 REQUIRED)
message("find ${OpenCV_VERSION}")

注释掉set命令,通过-D选项查找:

cmake -B build -DCMAKE_PREFIX_PATH=~/lib/opencv4.9.0_install

查找成功:

 

可以看到,支持子目录查找,就不用精确到具体文件目录了。

另外,在CMakeLists.txt文件中也可以直接设置CMAKE_PREFIX_PATH:

cmake_minimum_required(VERSION 3.0)

project(Demo)

# set(OpenCV_DIR "~/lib/opencv4.9.0_install/lib/cmake/opencv4")
set(CMAKE_PREFIX_PATH "~/lib/opencv4.9.0_install")

find_package(OpenCV 4.9 REQUIRED)
message("find ${OpenCV_VERSION}")

3.通过系统环境变量PATH查找 

gedit ~/.bashrc

在文件底部添加下面一段命令:

export PATH=~/lib/opencv4.9.0_install:$PATH

别忘了在当前终端source一下来重新执行.bashrc脚本,或者新打开一个终端会自动source :

source ~/.bashrc

Path设置的目录支持递归查找

验证一下:

cmake_minimum_required(VERSION 3.0)

project(Demo)


find_package(OpenCV 4.9 EXACT REQUIRED)
message("find ${OpenCV_VERSION}")

;