1. 查询电脑上的opencv版本:
pkg-config --modversion opencv

2. 在电脑上安装多个版本的opencv,可以通过指定安装路径进行设置:
     下载源码后进入文件夹,打开终端;

mkdir build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.4
#CMAKE_BUILD_TYPE 确定了编译类型,是release还是debug,一般release比较常用, ubuntu下就是.so库,但是window下会有dll和lib之分;
#CMAKE_INSTALL_PREFIX  安装路径前缀, 确定了这个路径后,make install的opencv 的includepath 和lib等都会安装在这个文件夹下;
make -j4
sudo make install  

接下来opencv就安装到/usr/local/opencv3.4下的文件夹中,可以按照这个路径查看你的opencv是否安装成功;

同理,也可以使用这种方法安装其他版本的opencv,只要将安装路径的prefix修改即可

3. 使用不同版本的opencv

如果想要在你的project中调用opencv库,个人觉得比较方便的还是CMakeLists文件,也有可能是因为用的比较多

如果只有一个版本的opencv,我们一般直接使用:

FIND_PACKAGE(OpenCV REQUIRED)

这种情况适用于只有一个版本的opencv,安装在默认路径下,一般是/usr/local/lib下,比如我的opencv2.4.13, 因为安装的时候如果不指定prefix路径,那么在make install 时会将所有的 .so 文件安装在 /usr/local/lib 下,所有的头文件安装在/usr/include下

但是这里我们对opencv3.4的安装指定了路径,所以,如果想要使用opencv3.4,则需要在find_package之前设定cmake的查找路径:

set(CMAKE_PREFIX_PATH "/usr/local/opencv3.4")

也就是让cmake去这里找opencv;

这里需要赘述的是,find_package 其实寻找的是OpenCVConfig.cmake文件,打开这个文件就能看到当前opencv所对应的版本,同时也对一些路径进行了定义,类似于c++中的宏的感觉,尤其是:OpenCV_LIBS  OpenCV_INCLUDE_DIRS 两个路径,这就保证了cmake可以正常找到opencv所需要的头文件和库文件;

因此也就有了第三种包含opencv的方法,就是直接设定这两个路径:

set(OpenCV_DIR "/usr/local/opencv3.4/share/OpenCV")
find_package(OpenCV 3.4 REQUIRED COMPONENTS core highgui imgproc flann calib3d)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

然后将${OpenCV_INCLUDE_DIRS} 和 ${OpenCV_LIBS} 分别添加到 include_directories 和 target_link_libraries中即可;

白巧克力的在cmakelists中设定opencv: https://blog.csdn.net/heyijia0327/article/details/54575245

另外还有一种方法即设定makefile, 其实cmakelist的目的也是为了生成makefile, 然后进行编译,因此,我们也可以跳过cmakelist,直接写makefile文件,这里说一下如何在makefile中包含指定路径的opencv:

这里的设定也有两种方法,第一种是指定INCLUDE 和lib 的路径后进行链接,如下:

#这里需要根据自己在linux上配置的opencv路径修改

INCLUDES = -I/usr/local/opencv3.4/include/opencv  #INCLUDES 指定了头文件的路径
LIBS = -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml # LIBS 指定了需要哪些库
LIBDIRS = -L/usr/local/opencv3.4//lib #LIBDIRS 指定了需要的库的路径
OPT = -O3 -Wno-deprecated
CC=g++     # 使用g++进行编译
.PHONY: all clean  #说明 all 和clean 两个目标文件都是伪目标文件 主要是为了节省命令,每次自动指定test2目标的生成
OBJS= test2.o
clean:   # 伪目标cleam, 这两句话主要是为了清除掉所有的依赖库 .o 文件,以及 可执行文件 test2rm -f *.o *~ test2
all:test2  echo all:make complete%.o:%.cpp    # 这两句话表示 库test.o 是依赖于 文件test.cpp 的$(CC) -c $(INCLUDES) $+ $(OPT)  #要生成.o 库,需要利用g++ 进行编译,同时包含 INCLUDES 这个变量所指定的头文件,OPT指定的一些生成库时的优化选项test2:$(OBJS)  # 这时已经生成了一个 test.o的 依赖库, 接下来需要生成一个叫做test2的可执行文件$(CC) $(LIBDIRS) $(LIBS) -o $@ $+ $(OPT)   # 同理,也需要用g++进行编译,然后需要链接到test.o的库, $@ 其实表示所有的目标集,也就是.o文件,本例中只有test.o 

makefile的文件来源于博客 https://blog.csdn.net/pbypby1987/article/details/18969441, 博客给了例子,没有详细的讲解,这里赘述一下;

更详细的makefile的语法可以参考陈浩博士的 跟我一起学makefile系列,很详细也很清晰;

上面的例子是自己的新建,比较简短,只包含了opencv,且目标文件也比较少,当目标文件比较多 或这需要的库也比较多时,可以利用pkg-config来进行设置;

首先来说一下具体的设置步骤,然后再来说一下这其中的包含关系以及为什么要这么设定:

还是以自定义安装路径为例,如果非自定义,一般会安装在/usr/local/lib下,将对应的路径修改就好;

2. 配置环境变量,使得运行时库可以被找到

这里假装回到刚刚执行完make install 命令,接下来就是配置环境变量,让opencv3.4可以被找到:

1. 编辑配置文件

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

2. 执行此命令后,有可能打开的是一个空白文件,也有可能文件中已经有/usr/local/lib, 只需要接着写入lib路径即可; 如: 

/usr/local/opencv3.4/lib 

写完后的结果如下:

3. 生效配置文件:

执行如下的命令才能让刚才的配置路径生效:

sudo ldconfig

其实执行完sudo ldconfig之后,就可以在对应的路径,也就是/usr/local/opencv3.4/lib 中找到一个对应的pkgconfig文件,如下:

进入到pkgconfig路径下后可以看到文件opencv.pc,具体内容如下:

# Package Information for pkg-config
​​​​​​​prefix=/usr/local/opencv3.4
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/includeName: OpenCV
Description: Open Source Computer Vision Library
Version: 3.4.0Libs: -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}  

从上面的文件也可以看出 .pc 文件其实就是包含了当前opencv版本的信息以及文件信息,其实与opencvconfig.cmake文件属性类似;

4. 接下来就需要设置电脑上的环境变量, 添加这个.pc文件的路径,使其可以让pkgconfig可以找到;

配置 bash

sudo gedit /etc/bash.bashrc

在末尾追加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv3.4/lib/pkgconfig#也就是包含.pc文件的路径

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

source /etc/bahs.bashrc

更新:

sudo updatedb

3. 复杂的makefile的例子

这里举一个复杂的makefile的例子(对我比较复杂),部分makefile如下:

CC=g++   #设定编译器类型
CFLAGS = -I ../common/inc -std=c++1y -g0 -O3 -I/usr/local/opencv3.4/include  #编译选项
$(shell mkdir -p $(OUT_DIR))
main: $(OUTPUT_SOC) $(OUTPUT_C) $(OUTPUT_MAP) $(OUTPUT_PACKET) $(OUTPUT_RX_DATA_PARSER) $(OUTPUT_DEBUG) $(OUTPUT_PROTOCOL) $(OUTPUT_DETECTIONDATA) $(OUTPUT_DOORFRAME) $(OUTPUT_LINESEGMENT)@$(CC) -pthread -o $@ $(CFLAGS) $(OUTPUT_SOC) $(OUTPUT_C) $(OUTPUT_MAP) $(OUTPUT_PACKET) $(OUTPUT_RX_DATA_PARSER) $(OUTPUT_DEBUG) $(OUTPUT_PROTOCOL) $(OUTPUT_DETECTIONDATA) $(OUTPUT_DOORFRAME) $(OUTPUT_LINESEGMENT) `pkg-config --libs --cflags opencv`   #按照pkg的配置进行库的查找$(OUTPUT_SOC): src/socket.cpp    #生成目标依赖库$(info Compiling $(<))@$(CC) $(CFLAGS) -c $< -o $@  

其中,第6行的

`pkg-config --libs --cflags opencv`  

这句话设定了利用pkg-config进行opencv的库的查找

为了确定opencv是否在config的路径中,可以用

export PKG_CONFIG_PATH 或者echo ${PKG_CONFIG_PATH} 

进行检验;

.pc 文件参考:https://blog.csdn.net/absurd/article/details/599813

陈浩博士:https://blog.csdn.net/haoel/article/details/2887

环境配置参考:https://www.jianshu.com/p/f646448da265

在cmakelists和makefile中设置opencv相关推荐

  1. 利用C++中的opencv进行图像拼接

    这篇文章依旧是记录采用C++复现图像拼接过程解决遇到的问题.因为自己没有学过C++,大学学的C考完试立马还给老师了,Python也是现学的,只会一点点MATLAB,所以遇到的问题和解决都很基础,目的是 ...

  2. Ubuntu 16.04中安装OpenCV 2.4.11

    Original URL:http://www.linuxidc.com/Linux/2016-07/132882.htm Ubuntu 16.04中安装OpenCV 2.4.11参考网址如下: ht ...

  3. 如何在Android中使用OpenCV

    看了网上的很多教程和官方http://opencv.willowgarage.com/wiki/Android提供的如何在Android上使用OpenCV的教程,照着一步一步的做最后总有些问题,不是A ...

  4. Rockchip rv1126平台在gstreamer1中添加OpenCv实现视频流负片的效果

    研究了一天,发现最终代码只有几行,所以简单记录一下. 到写 这篇记录为止,我没有发现rv1126的gstreamer1补丁中,RK 没有为视频流提供负片效果的patch, 在RGA的API中, 确实有 ...

  5. Linux下Makefile中动态链接库和静态链接库的生成与调用

    背景:写这篇博客的原因是:最近在搞嵌入式,需要交叉编译opencv库文件,自己写Makefile,通过arm-linux-g++编译.链接.生成可执行文件,从而实现了移植的过程.平台是Toradex的 ...

  6. 【从零学习OpenCV】4Ubuntu系统中安装OpenCV 4

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...

  7. makefile中变量有哪些?

    make一些参数选项: -p 选项,可以打印出make过程中的数据库, 下面研究一下内置的变量和规则. -n 选项, 只运行,不执行, -d 选项,相当于–debug=a,b(basic),v(ver ...

  8. makefile中的零星知识点

    文章目录 1 make命令的使用 2 变量的导出(export) 3 Makefile中可以使用shell命令 4 在Makefile中怎么放置第1个目标 5 假想目标 1 make命令的使用 执行m ...

  9. android安装python opencv_MacLinux环境在Android Studio中安装OpenCV

    在Android Studio中安装OpenCV 对于女程序猿来说,每次安装个什么软件,或者是配置个什么环境啊,经常整得很崩溃.本程序猿阿姨也是如此~(啊,我说我是阿姨了吗?) 好了,言归正传~ 我们 ...

最新文章

  1. DB2数据库常用工具
  2. 常用字符与ASCII代码对照表
  3. bzoj3626:[LNOI2014]LCA
  4. 要是有力气的话可以做装卸工,月入过万不是梦
  5. Codeforces Round #131 (Div. 2) B. Hometask dp
  6. oracle怎么装系统,【Oracle安装与操作系统用户组】
  7. asp.net中获取远端WEB页内容
  8. Java速成系列-03-Java的下载
  9. CentOS(Linux)安装KETTLE教程 并配置执行定时任务
  10. canbus是什么意思_CANBUS是什么意思
  11. android 自由落体,Android动画之属性动画1 自由落体
  12. 用友财务系统对接第三方业务系统达到财务业务一体化管理
  13. python编程之条形码生成大全
  14. DNS服务器未响应惊叹号,怎么办呢电脑连接网络出现感叹号?
  15. Word格式处理控件Aspose.Words for .NET教程——设置字体格式并获取行距
  16. C#版 - Leetcode 306. 累加数 - 题解
  17. 计算机录音机应用程序在哪,win10电脑自带录音在哪里打开
  18. iOS 一个带动画的等待指示器
  19. 学习android开发的网站
  20. The 2020 ICPC Asia Shenyang Regional Programming Contest I题 Rise of Shadows(数论)

热门文章

  1. zeppelin k8s安装部署和基本使用教程(在线的分析工具)
  2. quartus调用D触发器DFF和JK触发器JKFF
  3. theadClasses设置Bootstrap Table表头样式
  4. 【旧文章搬运】360安全卫士HookPort.sys完美逆向
  5. Kibana6.x.x源码结构分析笔记
  6. Software--Architecture--SOA 面向服务体系结构
  7. c语言,指针与数组--指针与二维数组2
  8. 冲刺One之站立会议6 /2015-5-19
  9. [转载] python int类数据的内存大小
  10. [转载] real和imag在python_Python numpy.imag() 使用实例