opencv设置cmake

2023-05-16

第一种使用 find_package的方法

  • 示例代码如下:

# 声明要求的 cmake 最低版本
cmake_minimum_required( VERSION 2.8 )

# 声明一个 cmake 工程
project( pro )

# 设置编译模式
set( CMAKE_BUILD_TYPE "Debug" )

#添加OPENCV库
#指定OpenCV版本,代码如下
#find_package(OpenCV 3.3 REQUIRED)
#如果不需要指定OpenCV版本,代码如下
find_package(OpenCV REQUIRED)

#添加OpenCV头文件
include_directories(${OpenCV_INCLUDE_DIRS})

#显示OpenCV_INCLUDE_DIRS的值
message(${OpenCV_INCLUDE_DIRS})

# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( main main.cpp )

# 将库文件链接到可执行程序上
target_link_libraries( main  ${OpenCV_LIBS})
  • 代码部分解释

find_package(OpenCV REQUIRED)会在Ubuntu系统中找到OpenCVConfig.cmake,该文件定义了OpenCV_INCLUDE_DIRSOpenCV_LIBS 等变量,因而可以使用 include_directoriestarget_link_libraries来访问这两个变量。

可以通过打开terminal输入locate OpenCVConfig.cmake来找到这个.cmake文件,用以确认系统确实安装了OpenCV.

第二种使用link_libraries(opencv库名的方法)

既然我们知道了find_package的作用是找到后缀名为.cmake的文件,以此来获取其中的引用目录(.h文件的路径)库的路径(例如“ /usr/lib/x86_64-linux-gnu/libopencv_video.so”),那么我们也可以选择直接使用正确路径的引用目录库目录

通过include_directories( your/path/to/OpenCV/include)来正确添加引用目录
通过link_directories( your/path/to/OpenCV/lib) 来添加库的目录
通过link_libraries(name1 name2 name3)来实现库的链接
有了link_libraries(name1 name2 name3),就不需要target_link_libraries(main ${PATH/NAME})了。

  • 示例代码如下(示例中使用的是ROS系统安装的opencv3的路径和库)

cmake_minimum_required( VERSION 2.8 )
project( pro )
set( CMAKE_BUILD_TYPE "Release" )
set( CMAKE_CXX_FLAGS "-std=c++11" )
include_directories(
        "/opt/ros/kinetic/include/opencv-3.3.1-dev/"
)
#添加动态库的路径
link_directories("/opt/ros/kinetic/lib/x86_64-linux-gnu")
#有了上面的路径,下面就可以直接写opencv_aruco3这样的名字了
#opencv_xxxxx不带d和带d分别表示release和debug版本。
link_libraries(
        opencv_aruco3
        opencv_bgsegm3
        opencv_bioinspired3
        opencv_calib3d3
        opencv_ccalib3
        opencv_core3
        opencv_cvv3
        opencv_datasets3
        opencv_dpm3
        opencv_face3
        opencv_features2d3
        opencv_flann3
        opencv_fuzzy3
        opencv_hdf3
        opencv_highgui3
        opencv_imgcodecs3
        opencv_img_hash3
        opencv_imgproc3
        opencv_line_descriptor3
        opencv_ml3
        opencv_objdetect3
        opencv_optflow3
        opencv_phase_unwrapping3
        opencv_photo3
        opencv_plot3
        opencv_reg3
        opencv_rgbd3
        opencv_saliency3
        opencv_shape3
        opencv_stereo3
        opencv_stitching3
        opencv_structured_light3
        opencv_superres3
        opencv_surface_matching3
        opencv_text3
        opencv_tracking3
        opencv_video3
        opencv_videoio3
        opencv_videostab3
        opencv_viz3
        opencv_xfeatures2d3
        opencv_ximgproc3
        opencv_xobjdetect3
        opencv_xphoto3
        )
 #生成程序
add_executable( main main.cpp  )
#不需要target_link_libraries()了
  • 在写代码过程中发现的东西

  1. link_directories()单单用这条命令基本没什么意义。一般这里面填写的参数之前也在$PATH中包含了。

  2. link_libraries里面可以有多个库的名字。

  3. find_library指令也是用来找库进行链接的。用法如下:
    find_library (<VAR> name1 [path1 path2 ...])
    find_library官方说明
    示例 find_library(OpenCV_LIBS opencv_aruco3 "/opt/ros/kinetic/lib/x86_64-linux-gnu" )
    意为:在路径/opt/ros/kinetic/lib/x86_64-linux-gnu中寻找名为libopencv_aruco3.so的库,将其命名为OpenCV_LIBS
    正如find_library这个名字所象征的,它只能找一个库,不能同时找多个库,虽然官网有示例说可以加入option实现,但我没有成功。它不能实现类似于aux_source_directory(. SRC)的功能

  4. find_library()由于只是将某个so文件映射为某个指定的变量,比如将/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_aruco3.so映射为OpenCV_LIBS,因而在使用这个libopencv_aruco3.so时,就需要加入target_link_libraries(main ${OpenCV_LIBS})来使这个库成功和main链接

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

opencv设置cmake 的相关文章

  • 开放简历fisherfaces

    我有这个问题 当我使用 vs2010 调试 opencv 2 4 0 facetec demo c 运行时 程序出现此错误 OpenCV错误 未知函数中图像步长错误 矩阵不连续 因此其行数无法更改 文件 src opencv modul e
  • 查找具有不同强度/亮度的相似图像

    假设我有如下图像 我可以选择什么来比较两个图像之间的相似度 显然它们是相同的图像 只是亮度不同 我找不到任何可行的方法 目前我最好的选择是训练 cnn 或自动编码器并比较输出的特征向量 但这似乎有点矫枉过正 任何提示将不胜感激 相当强大的工
  • 如何检测斑点并将其裁剪成 png 文件?

    我一直在开发一个网络应用程序 我陷入了一个有问题的问题 我会尝试解释我想要做什么 在这里您看到第一个大图像 其中有绿色形状 我想要做的是将这些形状裁剪成不同的 png 文件 并使它们的背景透明 就像大图像下面的示例裁剪图像一样 第一张图像将
  • 在骨架图像中查找线 OpenCV python

    我有以下图片 我想找到一些线来进行一些计算 平均长度等 我尝试使用HoughLinesP 但它找不到线 我能怎么做 这是我的代码 sk skeleton mask rows cols sk shape imgOut np zeros row
  • 通过ExternalProject_Add 使用 pybind11 进行 CMake 项目的智能方法

    我正在使用编写一个 python 模块pybind11 with CMake3 9 4 因为方便所以想下载pybind11源文件使用ExternalProject Add in my CMakeLists txt 当我跑步时cmake 它不
  • 未加载库:@rpath/libopenblasp-r0.2.19.dylib

    我应该如何解决这个问题 Monas MacBook Pro 02 02 mona python Python 3 6 1 Anaconda custom x86 64 default May 11 2017 13 04 09 GCC 4 2
  • 提取二值图像中的最中心区域

    我正在处理二进制图像 之前使用此代码来查找二进制图像中的最大区域 Use the hue value to convert to binary thresh 20 thresh thresh img cv2 threshold h thre
  • 将图像加载到现有 Mat 中

    有没有办法将图像加载到现有的 Mat 中 如果没有 有没有办法控制 OpenCV 在调用 cv imread 时分配内存的位置 我只是为您的类创建一个构造函数 该构造函数接受 imread 的输入参数并将图像直接加载 并分配 到您的类中 所
  • cmake 包括其他目录中的 h 文件

    我在 cmake 项目下进行测试时遇到问题 我的项目是这样安排的 TerrainMap PointAccumulator heightQuadGrid Test 在 TerrainMap 目录中 CMakeLists txt 文件简单地概述
  • 如何在python 3.8中安装opencv-python

    我在 pycharm 中安装 opencv python 时遇到问题 打开 pycharm 后 我单击 设置 然后单击 项目解释器 单击 并搜索正确的模块 我开始安装 但失败了 Could not find a version that s
  • 如何选择图像插值方法? (Emgu/OpenCV)

    Emgu OpenCV的 net包装器 提供的图像调整大小功能可以使用四种插值方法中的任意一种 http www emgu com wiki files 1 4 0 0 html 596dd03d 301e d3c6 4c53 c42855
  • 在 CMake 中,CHECK_INCLUDE_FILE_CXX 如何工作?

    以下代码不打印任何内容 CHECK INCLUDE FILE CXX glog logging h GLOG INCLUDE IF GLOG INCLUDE MESSAGE YY ENDIF GLOG INCLUDE 但我设置了以下环境变量
  • 如何将 gnatmake/gnatbind/gnatlink 集成到 C/Ada 代码的 CMake 文件中?

    我用几种语言 C C Fortran77 Fortran90 编写了代码 并且可以使用 CMake 编译它 没有任何问题 效果很完美 现在 我想在用 C 编写的 main 中添加一些 Ada 函数 并且我想通过 CMake 编译它 鉴于我无
  • 在 Tensorflow-lite Android 中将位图转换为 ByteBuffer(浮点)

    在用于图像分类的tensorflow lite android演示代码中 图像首先转换为ByteBuffer格式以获得更好的性能 这种从位图到浮点格式的转换以及随后到字节缓冲区的转换似乎是一个昂贵的操作 循环 按位运算符 float mem
  • OpenCV功能类似于matlab的“查找”

    我正在寻找 openCV 中的一个函数来帮助我制作图像蒙版 例如在 MATLAB 中 B A or B 零 大小 A B A 10 c 有些功能可以让你通过mask向他们提出论据 按照您描述的方式创建面具 我认为您正在追求Cmp 或 Cmp
  • Python 2.7/OpenCV 3.3: cv2.initUn DistorifyMap 中出现错误。不显示不扭曲的校正图像

    我想扭曲并校正我的立体图像 为此 我在 Python 2 7 中使用了 Opencv 3 3 我使用的代码是 import cv2 import numpy as np cameraMatrixL np load mtx left npy
  • 为什么在 OpenCV 中访问该矩阵时出现内存错误?

    我只是想写入给定大小的矩阵 当我在 Valgrind 中运行该程序时 出现内存错误 如下所示 主要 cpp include
  • C++ OpenCV imdecode 慢

    我将图像的字节数组从 C 发送到 C 库 我使用 OpenCV 版本 3 3 1 解码图像 BMP 图像解码速度很快 但 JPEG 图像解码速度很慢 如何加快 JPEG 图像的解码时间 多线程 GPU 解码性能 Resolution For
  • HTC One M8 - 使用第二个后置摄像头

    我有一台 HTC One M8 设备 它有 2 个后置摄像头和一个额外的前置摄像头 我的问题是尝试访问第二个后置摄像头 我已经成功制作了一个应用程序 它同时运行 2 个摄像头 1 个前置摄像头和 1 个后置摄像头 但问题是我无法访问第二个后
  • 将 Doctest 与代码一起使用时将实现放在哪里

    我在用着doctest https github com onqtam doctest用于我的 C 项目中的测试 我想将测试代码与我的实现放在一起 正如库所说是可能的 但我似乎不知道如何处理 doctest 实现代码 我有一个doctest

随机推荐

  • 前端入门HTML篇

    前端学习 HTML篇 W3school xff1a https www w3school com cn html index asp HTML是用于创建可从一个平台移植到另一平台的超文本文档的一种简单标记语言 xff0c 经常用来创建web
  • java实现递归设计——数鸭子和角谷定理

    一 题目分析 题目一 xff1a 一个人赶着鸭子去每个村庄卖 xff0c 每经过一个村子卖去所赶鸭子的一半又一只 这样他经过了七个村子后还剩两只鸭子 xff0c 问他出发时共赶了多少只鸭子 xff1f 经过每个村子卖出多少只鸭子 xff1f
  • Mysql将数据库中重复的数据全部显示出来

    Mysql将数据库中重复的数据全部显示出来 今天班上同学做项目跑过来问我怎么将表中的数据重复的显示出来 我也不知道她要做什么功能 xff0c 但是需求过来了 xff0c 秉着帮助同学的道理 xff0c 我开始了我的探索 我们这里将usern
  • uni-app中实现微信小程序/公众号订阅消息推送功能

    大家好 xff0c 我是中国码农摘星人 欢迎分享 收藏 赞 在看 xff01 开发业务时时常遇到需要向用户发送一些通知 xff0c 如欠费通知 会员到期通知等等 这里使用官方提供的 uni subscribemsg 公共模块实现推送功能 u
  • WEEK(7)作业——最短路专题(Floyd、Dijkstra、SPFA、负权环路)

    A TT的魔法猫 题目描述 众所周知 xff0c TT 有一只魔法猫 这一天 xff0c TT 正在专心致志地玩 猫和老鼠 游戏 xff0c 然而比赛还没开始 xff0c 聪明的魔法猫便告诉了 TT 比赛的最终结果 TT 非常诧异 xff0
  • Dockerfile实现容器镜像的自定义及生成

    一 Dockerfile介绍 Dockerfile是一种能够被Docker程序解释的剧本 Dockerfile由一条一条指令组成 xff0c 并且有自己的书写格式和支持的命令 当我们需要在容器镜像中指定自己额外的需求时 xff0c 只需要在
  • yum安装出现No package ****** available问题

    yum安装出现No package available问题 今天新装虚拟机centos7 在安装openvpn时候出现了如下问题 参考了网上的办法 xff1a 出现这种错误的原因分为两种 xff1a 网络问题 检查你的网络情况 xff0c
  • 第一章 操作系统基本概念

    第一章 第一节 操作系统的概念 功能与目标 操作系统作为用户接口 xff0c 提供了如下功能 命令接口 xff08 允许用户直接使用 xff09 联机命令接口 xff1a 交互 xff08 如命令行 xff0c 用户说一句系统做一句 xff
  • linux宝塔安装和部署node全栈项目

    使用服务器 阿里云ECS系列 服务器操作系统 Alibaba Cloud Linux 2 1903 LTS 64位 连接服务器方式 Workbench远程连接 使用公网IP登录 Workbench远程桌面 xff0c 使用命令安装linux
  • 数据结构课程设计之简单计算器的实现

    一 问题陈述 从键盘上输入一算术表达式 中缀白大师 xff0c 包括圆括号 xff0c 计算出表达式的值 要求 xff1a 程序对所输入的表达式作简单判断 xff0c 如有错给出提示 xff1b 实现算术四则运算 xff08 43 xff0
  • 程序设计思维与实践 Week15 作业 A ZJM与霍格沃兹

    题目描述 xff1a ZJM 为了准备霍格沃兹的期末考试 xff0c 决心背魔咒词典 xff0c 一举拿下咒语翻译题 题库格式 xff1a 魔咒 对应功能 背完题库后 xff0c ZJM 开始刷题 xff0c 现共有 N 道题 xff0c
  • 深度学习一些感受

    写篇文章理一理 最近在搞文字识别 xff0c 算是第一个比较正式的深度学习项目 xff0c 连带看了一些文章 混淆了好多次 先记下目前对深度学习的一些理解 首先是特征提取器 目前深度学习应用在CV xff08 计算机视觉 xff09 和NL
  • Week5:最大矩形——单调栈

    题目内容 给一个直方图 xff0c 求直方图中的最大矩形的面积 例如 xff0c 下面这个图片中直方图的高度从左到右分别是2 1 4 5 1 3 3 他们的宽都是1 xff0c 其中最大的矩形是阴影部分 输入格式 输入包含多组数据 每组数据
  • Competition3_t2

    题目描述 Q老师是个很老实的老师 xff0c 最近在积极准备考研 Q老师平时只喜欢用Linux系统 xff0c 所以Q老师的电脑上没什么娱乐的游戏 xff0c 所以Q老师平时除了玩Linux上的赛车游戏SuperTuxKart之外 xff0
  • 关于ERROR: Cause: unable to find valid certification path to requested target的解决

    ERROR Cause unable to find valid certification path to requested target 我有好几次遇到这个错误了 我先说说在报这个错误的时候我做了什么 xff1a 情况一 xff1a
  • Qt多线程开发之线程池处理QTcpSocket

    购买请慎重 不是刚需别买 只是Demo示例 仅供学习 文章目录 Qt多线程开发之线程池处理QTcpSocket 重写QTcpServer类MyServer 处理QTcpSocket数据类MyClient 任务处理对象MyTask 工程项目完
  • T1106 石头剪子布 #计蒜客 C++

    T1106 石头剪子布 题目描述 石头剪子布 xff0c 是一种猜拳游戏 起源于中国 xff0c 然后传到日本 朝鲜等地 xff0c 随着亚欧贸易的不断发展它传到了欧洲 xff0c 到了近现代逐渐风靡世界 简单明了的规则 xff0c 使得石
  • 静态路由配置实验二(途经三台路由设备)

    静态路由配置实验二 xff08 途经三台路由设备 xff09 实验拓扑图 PC1 PC2途经三台路由进行不同网段的相互通信 配置步骤 1 路由接口ip配置 路由设备A R1 config int f0 0 R1 config if ip a
  • CCFCSP历年认证考试真题解答汇总(已解决20道,持续更新ing)

    以下为本人CCFCSP刷题记录 xff0c 希望可以帮助到每一位想在这方面得到提升的码友们 xff0c 也请各位对我写的不好的地方进行指正 xff0c 大家一起进步 说明 xff1a 题目链接一栏可以直接进入到题目界面 xff0c 试题名称
  • opencv设置cmake

    第一种使用 find package的方法 示例代码如下 声明要求的 cmake 最低版本 cmake minimum required VERSION 2 8 声明一个 cmake 工程 project pro 设置编译模式 set CM