【opencv】——ubuntu安装多个opencv配置及使用

关键词:pkg-config,cmake,opencv

掌握opencv多版本的安装(编译,make install),pkg-config配置及编译程序,采用cmake来编译opencv项目。

1. 安装多个版本的opencv

多个版本的opencv可以通过apt-get,源码编译…等各种方式进行
这里我已经通过apt-get,源码编译两种方式安装好了。注意两种方式安装的路径不能一样,这里具体说一下我安装的路径

1.1 apt-get安装的路径
文件在/usr/include/opencv && /usr/include/opencv2,库文件在/usr/lib/, find_package需要用到的文件在/usr/share/OpenCV/OpenCVConfig.cmake(为什么不是FINDOpenCV.cmake呢?后面说明)
在这里插入图片描述

include路径

在这里插入图片描述

lib路径

1.2 源码编译opencv
参考:源码编译opencv

注意: CMAKE_INSTALL_PREFIX != CMAKE_INSTALL_PREFIX=/usr/local, 最好安装在一个自定义的路径,比如:/home/opencv/install

已经就安装好了两个opencv了,但是怎么使用opencv呢?也有两种方式:pkg-config,和cmake


2. pkg-config

pkg-config通过一个**.pc文件来记录一些变量,其实就是指明opencv的头文件,库文件路径

2.1 配置pkg-config路經

这里,我们使用上面源码安装的opencv,$INSTALL_PATH/lib/pkgconfig下生成了opencv.pc文件.

##opencv.pc
# Package Information for pkg-config

prefix=/home/darknet/CM/profile/opencv-3.4.5/install
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 3.4.5
Libs: -L${exec_prefix}/lib -lopencv_dnn -lopencv_ml -lopencv_objdetect -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_imgproc -lopencv_flann -lopencv_viz -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir_old} -I${includedir_new}

这个文件很重要,里面记录了OpenCV头文件、库文件的路經。需要进行如下配置:

#进入 bash.bashrc
sudo gedit /etc/bash.bashrc
 
#在文件最后添加如下内容
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
 
#更新
sudo updatedb

2.2 配置库路經

#打开下列文件
sudo gedit /etc/ld.so.conf.d/opencv.conf 
 
# 添加lib路經
/usr/local/lib
 
# 更新
sudo ldconfig

2.3 测试

查看opencv版本号:

pkg-config --modversion

在这里插入图片描述

2.4 如何使用apt-get的版本呢?

bash.bashrc中注释掉PKG_CONFIG_PATH环境变量,在source 一下就ok了,因为通过apt-get安装的opencv的opencv.pc文件在/usr/lib/x86_64-linux-gnu/pkgconfig/opencv.pc,该路径在pkg-config的默认搜索路径中,所以不需要再设置
在这里插入图片描述

2.5 编译opencv的项目

这种方式比较适合小项目,

gcc Test.c -o Test `pkg-config --cflags --libs opencv`

可以输出cflags opencvlibs opencv,可以看到就是头文件的路径和库文件的名字:
在这里插入图片描述

3. cmake 方式

cmake方式中使用find_package(OpenCV) 来导入包,那我安装了两个版本的opencv:3.2.0和3.4.5,如何控制采用哪个来编译程序呢?

需要掌握:

  • find_package的module,config模式和区别

3.1 module,config模式

这里就不细讲了。
可参考:

  1. Cmake之深入理解find_package()的用法
  2. 非常推荐看

2. findpackage默认的搜索路径
来自:https://cmake.org/cmake/help/latest/command/find_package.html,这里的<prefix>好像是/usr路径(ubuntu中),U表示unix系统,w表示windows

<prefix>/                                                       (W)
<prefix>/(cmake|CMake)/                                         (W)
<prefix>/<name>*/                                               (W)
<prefix>/<name>*/(cmake|CMake)/                                 (W)
<prefix>/(lib/<arch>|lib*|share)/cmake/<name>*/                 (U)
<prefix>/(lib/<arch>|lib*|share)/<name>*/                       (U)
<prefix>/(lib/<arch>|lib*|share)/<name>*/(cmake|CMake)/         (U)
<prefix>/<name>*/(lib/<arch>|lib*|share)/cmake/<name>*/         (W/U)
<prefix>/<name>*/(lib/<arch>|lib*|share)/<name>*/               (W/U)
<prefix>/<name>*/(lib/<arch>|lib*|share)/<name>*/(cmake|CMake)/ (W/U)

3.2 使用apt-get安装的opencv

看了上面两篇博客之后,就知道opencv是采用OpenCVConfig.cmake文件来使cmake找到的。

那apt-get安装的opencv之后,该文件在/usr/share/OpenCV/OpenCVConfig.cmake,所以在cmake中直接写:

find_package(OpenCV REQUIRED)

该条命令,实际是采用的config模式来找的(可以通过查考${OpenCV_DIR}变量来验证)
在这里插入图片描述
可以看到,找到的是/usr目录下的opencv

3.3 使用手动编译的opencv

  1. 通过设置<package_name>_DIR来实现
    在cmake中加上一句:
    # set(OpenCV_DIR $INSTALL_PATH/install/share/OpenCV)

其中的$INSTALL_PATH/install/share/OpenCV指向的OpenCVConfig.cmake所在的路径,因为这样设置不会去子目录下找

再次cmake验证一下
在这里插入图片描述

  1. 通过设置<package_name>_ROOT来实现
    设置<package_name>_ROOT会去子目录下找OpenCVConfig.cmake,但是需要在find_package前额外的设置一句
# cmake_policy(SET CMP0074 NEW)
find_package(OpenCV REQUIRED)

不然会忽略<package_name>_ROOT

参考

  1. https://www.jianshu.com/p/39fc5e548310
  2. https://blog.csdn.net/x_sanshao/article/details/95994931
  3. https://blog.csdn.net/chengde6896383/article/details/90702160/
  4. Cmake之深入理解find_package()的用法
  5. 非常推荐看
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值