当前位置:网站首页>如何在CMake项目中引入OpenCV
如何在CMake项目中引入OpenCV
2022-04-22 06:04:00 【蓝域小兵】
一、OpenCV下载
二、OpenCV编译安装
2.1 cmake编译安装
下载下来后,进入源码目录(即CMakeLists.txt的同级目录)
- 新建build目录
mkdir build
- 运行cmake命令,注意针对OpenCV的编译,该命令有许多选项,这里仅给出我自己常用的
sudo cmake -D CMAKE_INSTALL_PREFIX=/media/jaychen/Config/Deepin/local/libs/opencv/4.5_vino \
-D CMAKE_BUILD_TYPE=DEBUG \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_EXTRA_MODULES_PATH=/media/jaychen/Config/Deepin/local/libs/opencv_contrib/modules \
-D WITH_FFMPEG=ON ..
下面是安装选项的示例
* 选择安装位置
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv
* 选择编译方式
-D CMAKE_BUILD_TYPE=RELEASE/DEBUG
* 是否生成PKGCONFIG需要的opencv.pc文件
-D OPENCV_GENERATE_PKGCONFIG=ON/OFF
* 是否编译Contrib模块(这里的PATH要写到contrib下的modules)
-D OPENCV_EXTRA_MODULES_PATH=/home/..../opencv_contrib/modules
* 是否只是一个opencv_world动态链接库
-D BUILD_OPENCV_WORLD=ON/OFF
* 是否用Qt作为highgui模块的显示框架(需要先安装Qt)
-D WITH_Qt=ON/OFF
* 是否使用FFMPEG进行视频IO
-D WITH_FFMPEG=ON/OFF
- 运行make命令
- 运行sudo make install命令(如果是安装到/usr/llib等位置就需要root权限)
2.2 Linux直接安装
这种方式没有FindOpenCV.cmake以及OpenCVConfig.cmake。只有opencv.pc,是通过pkg-config方式组织库的。
sudo apt-get install libopencv-dev
三、在Cmake中引入OpenCV
3.1 使用OpenCVConfig.cmake
先设置OpenCV_DIR这个变量为OpenCVConfig.cmake文件所在的目录,然后可以直接使用find_package命令找到opencv库,后面就可以使用include_directories以及target_link_libraries命令引入opencv的库。cmake脚本代码如下:
set(OpenCV_DIR xxxx) # xxxx目录包含OpenCVConfig.cmake
find_package(opencv required) # 找到opencv库
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} *.cpp) # *.cpp指要编译的那些源文件
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBRARIES})
3.2 使用FindOpenCV.cmake
与3.1类似
3.3 使用opencv.pc
cmake_minimum_required(VERSION 3.17)
project(C__test)
set(CMAKE_CXX_STANDARD 14)
set(ENV{
PKG_CONFIG_PATH} /usr/lib/x86_x64-linux-gnu/pkgconfig)
find_package(PkgConfig REQUIRED)
pkg_check_modules(OPENCV REQUIRED IMPORTED_TARGET opencv)
#MESSAGE(STATUS ${OPENCV_LIBRARIES})
if(${OPENCV_FOUND})
MESSAGE(${PKG_CONFIG_EXECUTABLE})
MESSAGE(${OPENCV_LIBRARIES})
MESSAGE(${OPENCV_LINK_LIBRARIES})
endif()
add_executable(C__test main.cpp) # 注意add_executable要放在target_link_libraries的前面,不然会报错
# 注意这里可以直接使用PkgConfig::OPENCV这种方式CMake文档, FindPkgConfig中有讲,百度cmake pkgconfig doc就有。
target_link_libraries(${PROJECT_NAME} PkgConfig::OPENCV)
四、在Linux中切换OpenCV的版本
有时不同的程序运行需要不同版本的OpenCV,编译安装了多个OpenCV到不同的位置,就需要切换系统链接时的不同版本。下面记录了Linux系统查找动态链接库的几种方式
Linux查找动态链接库的几种方式
默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件
- LD_LIBRARY_PATH
这是一个全局的变量 - rpath
gcc编译选项中rpath=xxx,如gcc -L. -Wl,-rpath=/home/bow/all/program/test/lib_version_test -o test main.o -ltest - ld.so.conf
一般位于/etc/ld.so.conf,有时其中的内容为include /etc/ld.so.conf.d/*.conf,直接包含/etc/ld.so.conf.d目录下所有的conf文件
conf文件中记录库的目录绝对路径,并且由/usr/lib/ld程序使用该配置文件 - pkg-config程序
pkg-config程序是向configure程序提供系统信息的程序,比如软件版本,库版本,库路径等等。安装pkg-config后会有一个PKG_CONFIG_PATH环境变量,这个环境变量存储保存*.pc文件的目录路径,.pc文件则提供库的各种信息,PKG_CONFIG_PATH搜索的优先级高于默认.
https://blog.csdn.net/weixin_38907560/article/details/81449272
./configure常用pkg-config来检查安装环境
pkg-config --cflags opencv 可以查看opencv的头文件目录
pkg-config --libs opencv 可以查看opencv的库文件目录
注意其中opencv是按照opencv.pc的名字来查找的,如果在PKG_CONFIG_PATH环境变量中找不到,就会去其默认的路径中找如/usr/local/lib/pkgconfig下
版权声明
本文为[蓝域小兵]所创,转载请带上原文链接,感谢
https://blog.csdn.net/u013238941/article/details/118527040
边栏推荐
- Comparative analysis of slope and aspect between ArcMap tin and grid DEM
- 手把手教你一小时设计基于matlab的信号发生器GUI界面(1)
- Win10下AI CC 2019安装教程(超级详细-小白版)
- api集中管理
- Waterfall layout JS positioning
- spark小案例——RDD,broadcast
- 短视频内容理解与生成技术在美团的创新实践
- glide 4.0 之后 和圆角裁剪CenterCrop冲突
- Zotero6.0版本 Quicklook不能使用/中文乱码不显示
- glide 4.0 之前 glide 设置圆形图片 设置图片圆角 (可一起设置4个角 也可以单独的设置 其中某几个的角 )
猜你喜欢
随机推荐
抗生素对微生物组和人体健康的影响
手把手教你一小时设计基于matlab的信号发生器GUI界面(2)
一文读懂微生物扩增子16s测序
2019年就要结束了,最长的一天。
Encapsulate wechat applet to obtain longitude and latitude + permission determination + guidance authorization in real time (no 30 second delay)
《深度学习》花书学习第一周
自定义switch控件
数据密集型应用系统设计专题
获取两个时间之间的所有日期
细菌感染和抗生素使用
通用型枚举常量类
Waterfall layout JS positioning
spark案例——wordcount
自定义notifycation参考文章
Nested use of Excel if, and and or functions
【AI视野·今日NLP 自然语言处理论文速览 第三十二期】Wed, 20 Apr 2022
常用的各种工具类 状态栏 缓存 转化 获取app信息 剪切板 文件操作 加解密操作
api集中管理
阿里巴巴提示:手动创建线程效果更好
短视频内容理解与生成技术在美团的创新实践









