通过学习opencv图像库编程借助第三方库函数完成一个综合程序设计

通过学习opencv图像库编程借助第三方库函数完成一个综合程序设计

1) 编译命令解释:

编译命令:

gcc test1.cpp -o test1 `pkg-config --cflags --libs opencv`

这条命令包含了以下部分:

  • gcc test1.cpp -o test1:
    • gcc 是 GNU 编译器集合(GCC)中的 C 编译器,用于编译 C++ 源代码文件(如 test1.cpp)。
    • -o test1 选项指定了输出的可执行文件名为 test1
  • pkg-config --cflags --libs opencv:
    • 这是一个命令替换部分,pkg-config 是一个用于获取已安装的库的编译和链接信息的工具。通过 pkg-config,你可以获取与 OpenCV 相关的编译和链接参数。
    • --cflags: 返回编译时需要的标志(例如,包含 OpenCV 头文件的路径)。
    • --libs: 返回链接时需要的标志(例如,链接 OpenCV 库的路径和需要链接的库)。

因此,pkg-config --cflags --libs opencv 会返回类似以下内容的路径和标志:

-I/usr/include/opencv4   # 头文件路径
-L/usr/lib/x86_64-linux-gnu -lopencv_core -lopencv_imgproc -lopencv_highgui   # 链接的库路径和库文件

编译命令会将这些路径和标志添加到 GCC 命令中,确保程序能够找到 OpenCV 的头文件和库文件。

2) 使用 makeMakefile 编译:

创建一个 Makefile 文件,进行编译,并添加 clean 选项来清理生成的文件。

# 变量定义
CXX = g++
CXXFLAGS = `pkg-config --cflags opencv4`
LDFLAGS = `pkg-config --libs opencv4`
SRC = test1.cpp
OUT = test1# 默认目标
all: $(OUT)# 链接规则
$(OUT): $(SRC)$(CXX) $(SRC) -o $(OUT) $(CXXFLAGS) $(LDFLAGS)# 清理目标
clean:rm -f $(OUT)

解释:

  • CXX:指定编译器,使用 g++ 来编译 C++ 文件。
  • CXXFLAGSLDFLAGS:这两个变量分别通过 pkg-config 获取 OpenCV 所需的编译标志和链接标志。
  • SRC:源代码文件 test1.cpp
  • OUT:最终生成的可执行文件名称 test1

使用 make 命令:

make

这将根据 Makefile 中的规则进行编译,并生成 test1 可执行文件。

清理编译文件:

make clean

这将删除生成的 test1 可执行文件。

3) 使用 CMake 进行编译:

CMake 中,我们通常会编写一个 CMakeLists.txt 文件来配置项目。

创建 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.10)
project(OpenCVTest)# 查找 OpenCV 包
find_package(OpenCV REQUIRED)# 添加可执行文件
add_executable(test1 test1.cpp)# 链接 OpenCV 库
target_link_libraries(test1 ${OpenCV_LIBS})

解释:

  • find_package(OpenCV REQUIRED):寻找并加载 OpenCV 包。
  • add_executable(test1 test1.cpp):指定要生成的可执行文件及其源代码文件。
  • target_link_libraries(test1 ${OpenCV_LIBS}):将 OpenCV 库链接到生成的可执行文件。

使用 CMake 编译:

  1. 在项目目录下创建一个 build 目录并进入:

    mkdir build
    cd build
    
  2. 运行 cmake 来生成构建文件:

    cmake ..
    
  3. 使用 make 编译项目:

    make
    
  4. 运行生成的可执行文件:

    ./test1
    

以上就是使用 makeCMake 编译 OpenCV 程序的过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/75988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十四届蓝桥杯大赛软件赛国赛C/C++研究生组

研究生C国赛软件大赛 题一:混乘数字题二:钉板上的正方形题三:整数变换题四:躲炮弹题五:最大区间 题一:混乘数字 有一点像哈希表: 首先定义两个数组,拆分ab和n 然后令n a*b 查看两个…

系统与网络安全------网络通信原理(2)

资料整理于网络资料、书本资料、AI,仅供个人学习参考。 物理层解析 物理层概述 物理层是TCP/IP模型的最底层物理层数据传输提供稳定的物理连接 物理层功能 定义设备的物理连接的标准和特性,比如接口形状,大小定义电气特性,高低…

内容中台的数字化管理核心是什么?

数字化整合与系统协同 现代企业的内容管理正经历从分散式架构向数字化整合的范式转变。通过将内容管理系统与文档管理技术深度耦合,组织能够打破数据孤岛,实现跨部门、跨平台的资源互通。例如,基于元数据分类的标准化体系,不仅提…

Python爬虫第二战(使用xpath爬取网站数据)

本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习。 使用xpath爬取猪八戒网站数据 前言 前言 今天学习的主要是关于Python使用xpath来爬取猪八戒网的网页知识的理解和应用 #1.获…

进程同步和进程互斥的区别

如大家所了解的,进程互斥是由互斥资源引起的,即各进程之间共享互斥资源的使用权,这种竞争没有确定的必然联系,哪个进程竞争到互斥资源的使用权,则该资源就归哪个进程使用,从而获得所需资源的进程就可以获得…

ArkTS语言基础之函数

前言 臭宝们终于来到了ArkTS基础之函数,今天我们来学习一下ArkTS的函数的相关知识,上一节中也有一些函数的基础知识。 函数声明 函数声明引入一个函数,包含其名称、参数列表、返回类型和函数体,在下面的例子中,我们声明了一个名…

redis中的hash

Redis中的hash是什么 Hash: 哈希,也叫散列,是一种通过哈希函数将键映射到表中位置的数据结构,哈希函数是关键,它把键转换成索引。 Redis Hash(散列表)是一种 field-value pairs(键值对&#x…

弹簧质点系统(C++实现)

本文实现一个简单的物理算法:弹簧质点系统(Mass-Spring System)。这是一个经典的物理模拟算法,常用于模拟弹性物体(如布料、弹簧等)的行为。我们将使用C来实现这个算法,并结合链表数据结构来管理…

领域大模型

领域技术标准文档或领域相关数据是领域模型Continue PreTrain的关键。 现有大模型在预训练过程中都会加入书籍、论文等数据,那么在领域预训练时这两种数据其实也是必不可少的,主要是因为这些数据的数据质量较高、领域强相关、知识覆盖率(密度…

Wincc项目被锁定无法打开

Wincc项目被锁定无法打开 解决方法 解决方法 一般这种情况是因为项目打开的时候直接关机导致的。 删除项目文件夹的ProjectOpened.lck的文件夹即可 然后即可正常打开项目

SpringBoot3笔记

简介: springboot整合了springframework,整合了许多配置,让我们能够快速创建一个以springframework为基础的项目。 问题: 到目前为止,你已经学习了多种配置Spring程序的方式。但是无论使用XML、注解、Java配置类还是…

DeepSeek和文心一言的区别

文章目录 1.开发公司:2.应用场景:3.训练数据:4.模型架构:5.技术特点:6.语言风格:7.开源性:8.界面与用户体验: 1.开发公司: DeepSeek 由杭州深度求索人工智能基础技术研究…

Windows 10 安装Mysql 8

安装准备 下载 MySQL Windows ZIP版(无安装程序): 进入官网:https://dev.mysql.com/downloads/mysql/ 选择 Windows → 下载 ZIP Archive,例如: mysql-8.0.34-winx64.zip 如果你的电脑没有安装 VC Redi…

ARM分拣机vs传统PLC:实测数据揭示的4倍效率差

在苏州某新能源汽车零部件仓库,凌晨3点的分拣线上依然灯火通明。8台搭载ARM Cortex-A72处理器的智能分拣机正在以每秒3件的速度处理着形状各异的电池包组件,它们通过MES系统接收订单信息,自主规划最优路径,将不同规格的零部件精准…

使用python访问mindie部署的vl多模态模型

说明 今天使用mindie1.0部署了qwen2_7b_vl模型,测试过程出现一些问题,这里总结下。 问题1:transformers版本太低 报错信息: [ERROR] [model_deploy_config.cpp:159] Failed to get vocab size from tokenizer wrapper with ex…

vscode 跳转失败之c_cpp_properties.json解析

{"configurations": [{"name": "Linux", // 配置名称,对应当前平台,VS Code 中可选"includePath": ["${workspaceFolder}/**", // 包含当前工作区下所有文件夹的头文件(递归&…

飞速(FS)解决方案验证实验室搬迁升级,赋能客户技术服务

飞速(FS)解决方案验证实验室近日顺利完成搬迁升级,标志着飞速(FS)在解决方案可行性验证、质量保障以及定制化需求支持方面迈上新台阶,进一步提升了产品竞争力和客户信任度。 全新升级的实验室定位为技术验证…

安装kerberos认证的cdh环境

1、服务端安装 1.1 安装wget yum -y install wget 由于本地已安装过wget,所以显示Nothing to do 1.2 进入 home 目录 cd /home 1.3 下载centos6.7.iso文件,并挂载 wget https://archive.kernel.org/centos-vault/6.7/isos/x86_64/CentOS-6.7-x86_64…

MySQL基础 [六] - 内置函数+复合查询+表的内连和外连

内置函数一般要用select调用 内置函数 日期函数 current_date函数 current_date函数用于获取当前的日期。如下: current_time函数 current_time函数用于获取当前的时间。如下: now函数 now函数用于获取当前的日期时间。如下: date函数 dat…

CS内网渗透 - 如何通过冰蝎 Webshell 上线 Weblogic 服务器到 Cobalt Strike 并绕过杀软检测(360、火绒)?

目录 1. 冰蝎连接上 Weblogic 服务器如何上线到 Cobalt Strike 2. 服务器安装杀毒工具如何绕过杀软上线到 Cobalt Strike 2.1 杀软对 Webshell 命令执行的检测及绕过 2.2 杀软对 Cobalt Strike 上线木马的检测及绕过 2.3 杀软对这两方面的限制及综合绕过 3. 如何生成免杀…