当前位置: 首页 > news >正文

C/C++开发,认识opencv各模块

目录

一、opencv模块总述

二、opencv主要模块

        2.1 opencv安装路径及内容

        2.2 opencv模块头文件说明

        2.3  成熟OpenCV主要模块

        2.4 社区支持的opencv_contrib扩展主要模块

        2.5 关于库文件的引用


一、opencv模块总述

        opencv的主要能力在于图像处理,尤其是针对二维图片数据的处理。因此诸如图像结构表达、基本绘图能力、图像数据矩阵操作、图像变换、图像卷积、图像轮廓查找、目标识别、区域分割、模板匹配、图像滤波、图像特征描述等等。然后就是针对图像在各行各业的运用结合,例如与视频结合,进行相机标定,如何从摄像机获取视频或图片数据,如何加载已知视频及截取图片数据等。例如与硬件、操作系统的结合,支持到x86、ARM等硬件,也支持到win、linux、mac等操作系统。

        随着人工智能的快速崛起,opencv也随即跟进,支持机器学习、深度学习、人脸识别等技术,并与各个行业实际应用相结合,对于异物/缺陷检测、目标识别与跟踪、物体分类计数、尺寸/距离/位置测算等诸多方面运用给与支持。

二、opencv主要模块

        2.1 opencv安装路径及内容

        在opencv安装完成后,在其安装目录下(例如本文的基于vc2015+cmake源码编译的安装目录为D:\workForMy\OpenCVLib\opencv_VC),包含头文件include、库文件x64/vc14/lib、动态库链接x64/vc14/bin等关键文件目录:

         其中对于开发者来说,最主要的就是include文件夹,其存放着opencv的各个应用模块,成熟的opencv及最新扩展的opencv_contrib。opencv_contrib的支持主要在源码编译时加入扩展模块路径支持opencv_contrib源码(详见win10,vc2015+cmake安装编译及安装OpenCV的博文https://pyfree.blog.csdn.net/article/details/127627204)或本专栏的其他博文(win10,cmake+MinGW或centos7,cmake+g++安装opencv)

-DOPENCV_EXTRA_MODULES_PATH="$myRepo"/opencv_contrib/modules

        2.2 opencv模块头文件说明

        下来看看成熟的opencv都有那些主要功能模块,以win10,cmake+MinGW安装目录为例,该编译安装没有添加opencv_contrib支持的,并将一些次要的模块屏蔽了编译,进入include\opencv2目录下,可以看到包含了一些头文件和文件夹:

         需要注意的是一个文件夹对应的就是一个opencv功能模块,而直接放置在opencv2下的hpp头文件就是一些汇总的头文件引用,例如opencv.hpp包含了所有可能在OpenCV函数中用到的头文件。通常不建议直接引用opencv2目录下的汇总头文件,因为这样会减缓编译的速度,另外也不利于库链接及后面软件打包发布时软件大小。通常建议,如果只使用一个,比如说图像处理相关的函数,只包含opencv2/imgproc/imgproc.hpp所消耗的编译时间会比包含opencv.hpp消耗的编译时间少很多。类似,函数对应的源文件也存在于对应的src文件夹中。比如,improc模块的源码函数存在于..../modules/improc/src/*.cpp。

        在opencv2目录下的各个文件目录,就是对应的各个功能模块头文件,这些头文件分为c头文件(*.h)和c++头文件(*.hpp), 例如core功能函数的头文件:

#include "opencv2/core/core_c.h"    //旧式C风格
#include "opencv2/core/core.hpp"    //新式C++风格

        通常建议如果是纯c开发项目,采用c风格头文件支持,其他的采用c++风格。

        2.3  成熟OpenCV主要模块

        通常目前版本采用默认安装,不添加一些模块开关的特别设置,一般会有以下OpenCV模块被安装:

         这些功能模块能力简述如下:

Core:该模块包含OpenCV库的基础结构以及基本操作。Improc:图像处理模块包含基本的图像转换,包括滤波以及类似的卷积操作。Highgui:(在OpenCV 3.0以后,分割为imcodecs、videoio以及highgui三部分)这个模块包含可以用来显示图像或者简单的输入的用户交互函数。这可以看作是一个非常轻量级的Windows UI工具包。Video:该模块包含读取和写视频流的函数。Calib3d:这个模块包括校准单个、双目以及多个相机的算法实现。Feature2d:这个模块包含用于检测、描述以及匹配特征点的算法。Objdectect:这个模块包含检测特定目标,比如人脸或者行人的算法。也可以训练检测器并用来检测其他物体。Ml:机器学习模块本身是一个非常完备的模块,包含大量的机器学习算法实现并且这些算法都能和OpenCV的数据类型自然交互。Dnn:深度神经网络。Flann:Flann的意思是"快速最邻近库"。这个库包含一些你也许不会直接使用的方法,但是其他模块中的函数会调用它在数据集中进行最邻近搜索。Photo:这是一个相当新的模块,包含计算摄影学的一些函数工具。Stitching:本模块是一个精巧的图像拼接流程实现。这是库中的新功能,但是,就像Photo模块一样,这个领域未来预计有很大的增长。

        2.4 社区支持的opencv_contrib扩展主要模块

        opencv_contrib中的模块,主要由社区维护和开发,可能有非OpenCV许可的部分,并且可能包括受专利保护的算法。而OpenCV会在新版本发布时,可能会将一些在opencv_contrib中高频使用及市场认可的成熟模块加入到OpenCV本体中。另外随着OpenCV版本迭代更新,一些旧的、不合时宜的功能模块,会从OpenCV本体迁移到opencv_contrib中保留对旧有项目的支持。目前版本中,通常以下一些在opencv_contrib中常用模块(win10,vc2015+cmake,支持opencv_contrib按住目录如下):

Face:人脸识别。Text:文本检测以及识别,基于许多开源的OCR算法。Rgbd:处理由Kinect或者其他深度传感器(或者简单的由双目匹配得到的)获取的RGB+深度图像。Bioinspired:一些基于生物学启发的视觉技术。ximgproc和xphoto:先进的图像处理以及计算摄影学方法。Tracking:现代目标追踪算法。

        2.5 关于库文件的引用

        一般如果安装编译时,选择动态编译,最好将库所在目录加入环境变量中:

win下通常是:
操作系统\编译器名\bin;操作系统\编译器名\lib
例如:
x64\mingw\bin;x64\mingw\lib
x64\vc14\bin;x64\vc14\lib
win环境变量设置示例如下:
opencv_dir = D:\workForMy\OpenCVLib\opencv_VC\x64\vc14
path = %opencv_dir%/bin;%opencv_dir%/lib;其他环境变量路径linux下通常是:
/usr/local/lib*
例如:
/usr/local/lib64
Linux环境变量设置示例如下:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64

        动态库文件的引用将按程序内调用了那些模块的函数而引用对于的功能模块库文件。

头文件引用
INCLUDEDIR 	:= -I"../opencv_MinGW/include"
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>//库引用
LIBDIR		:= -L"../opencv_MinGW/x64/mingw/bin" -lopencv_core460 -lopencv_highgui460 -lopencv_imgcodecs460

        如果选择静态编译时,最好编译时开启BUILD_opencv_world支持:

-DBUILD_opencv_world=ON

        这是对于静态库引用直接引用libopencv_world*.a即可,*代表版本号。

//头文件引用
INCLUDEDIR 	:= -I"../opencv_MinGW/include"
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>//静态库引用,分为三部分,opencv总库,第三方依赖库、编译器本身基础依赖库
staticDir   := ../opencv_MinGW/x64/mingw/staticlib/
LIBDIR		:= $(staticDir)/libopencv_world460.a\$(staticDir)/libade.a \$(staticDir)/libIlmImf.a \$(staticDir)/libquirc.a \$(staticDir)/libzlib.a \$(wildcard $(staticDir)/liblib*.a) \-lgdi32 -lComDlg32 -lOleAut32 -lOle32 -luuid 

        在linux下的动态库引用类似:

//头文件引用
INCLUDEDIR 	:= -I"/usr/local/include/opencv4" 
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>//库引用
DLLDIR		:= "/usr/local/lib64"
LIBDIR		:= -L $(DLLDIR) -lopencv_core -lopencv_highgui -lopencv_imgcodecs

 

相关文章:

C/C++开发,认识opencv各模块

目录 一、opencv模块总述 二、opencv主要模块 2.1 opencv安装路径及内容 2.2 opencv模块头文件说明 2.3 成熟OpenCV主要模块 2.4 社区支持的opencv_contrib扩展主要模块 2.5 关于库文件的引用 一、opencv模块总述 opencv的主要能力在于图像处理&#xff0c;尤其是针对二维图…...

【WLSM、FDM状态估计】电力系统状态估计研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

准备2023(2024)蓝桥杯

前缀和 一维前缀和 s[i]s[i-1]a[i]二维前缀和&#xff08;子矩阵的和&#xff09; s[i][j]s[i-1][j]s[i][j-1]-s[i-1][j-1]a[i][j] 差分 一维数组 //b是差分数组b[i]c;b[j1]-c;例题 #include<iostream> using namespace std; int n,m; int b[100002],a[100002]; vo…...

剑指 Offer 60. n个骰子的点数

剑指 Offer 60. n个骰子的点数 难度&#xff1a;middle\color{orange}{middle}middle 题目描述 把n个骰子扔在地上&#xff0c;所有骰子朝上一面的点数之和为s。输入n&#xff0c;打印出s的所有可能的值出现的概率。 你需要用一个浮点数数组返回答案&#xff0c;其中第 i 个…...

阿里巴巴-淘宝搜索排序算法学习

模型效能&#xff1a;模型结构优化 模型效能&#xff1a;减枝 FLOPS&#xff1a;每秒浮点运算的次数 模型效能&#xff1a;量化 基于统计阈值限定&#xff0c;基于学习阈值限定。 平台效能&#xff1a;一站式DL训练平台 平台效能&#xff1a;搜索模型的系统流程 协同关系…...

〖Python网络爬虫实战⑮〗- pyquery的使用

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 说明&#xff1a;本专栏持续更新中&#xff0c;目前专栏免费订阅&#xff0c;在转为付费专栏前订阅本专栏的&#xff0c;可以免费订阅付费…...

SQL综合查询下

SQL综合查询下 目录SQL综合查询下18、查询所有人都选修了的课程号与课程名题目代码题解19、SQL查询&#xff1a;查询没有参加选课的学生。题目代码20、SQL查询&#xff1a;统计各门课程选修人数&#xff0c;要求输出课程代号&#xff0c;课程名&#xff0c;有成绩人数&#xff…...

全连接层FC

lenet结构: 输入层(Input Layer):接收手写数字的图像数据,通常是28x28的灰度图像。 卷积层1(Convolutional Layer 1):对输入图像进行卷积操作,提取低级别的特征,使用 6 个大小为 5x5 的卷积核进行卷积,得到 6 个输出特征图,激活函数为 Sigmoid。 平均池化层1(Aver…...

图的遍历及连通性

文章目录 图的遍历及连通性程序设计程序分析图的遍历及连通性 【问题描述】 根据输入的图的邻接矩阵A,判断此图的连通分量的个数。 【输入形式】 第一行为图的结点个数n,之后的n行为邻接矩阵的内容,每行n个数表示。其中A[i][j]=1表示两个结点邻接,而A[i][j]=0表示两个结点无…...

DJ3-4 实时调度

目录 3.4.1 实现实时调度的基本条件 1. 提供必要的信息 2. 系统的处理能力强 3. 采用抢占式调度机制 4. 具有快速切换机制 3.4.2 实时调度算法的分类 1. 非抢占式调度算法 2. 抢占式调度算法 3.4.3 常用的几种实时调度算法 1. 最早截止时间优先 EDF&#xff08;Ea…...

Oracle之PL/SQL游标练习题(三)

游标练习题目1、定义游标&#xff1a;列出每个员工的姓名部门名称并编程显示第10个到第20个记录2、定义游标&#xff1a;从雇员表中显示工资大于3000的记录&#xff0c;只要姓名、部门编号和工资&#xff0c;编程显示其中的奇数记录3、用游标显示所有部门编号与名称&#xff0c…...

docker运行服务端性能监控系统Prometheus和数据分析系统Grafana

文章目录一、Prometheus的安装和运行1、使用docker拉取镜像2、创建prometheus.yml文件3、启动容器4、查看启动是否成功5、记录安装过程中出现的错误二、Grafana的安装和运行1、使用docker拉取镜像2、创建grafana3、运行grafana4、查看grafana运行日志5、登录grafana一、Prometh…...

【Linux】【应用层】多线程编程

一、线程创建 Linux 中的 pthread_create() 函数用来创建线程&#xff0c;它声明在<pthread.h>头文件中&#xff0c;语法格式如下&#xff1a; int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine) (void *),void *arg);各个参数…...

GameFramework 框架详解之 如何接入热更框架HybridCLR

一.前言 HybridCLR是一个特性完整、零成本、高性能、低内存的近乎完美的c#热更新方案 GameFramework是一个非常出色完整的基于Unity引擎的游戏框架,里面包含了非常多的模块,封装非常完整。 以前市面上的热更大多数都是Lua为主,后来出了一个ILRuntime的C#热更框架,虽然性能…...

全国青少年软件编程(Scratch)等级考试二级考试真题2023年3月——持续更新.....

一、单选题(共25题,共50分) 1. 小猫的程序如图所示,积木块的颜色与球的颜色一致。点击绿旗执行程序后,下列说法正确的是?( ) A.小猫一直在左右移动,嘴里一直说着“抓到了”。 B.小猫会碰到球,然后停止。 C.小猫一直在左右移动,嘴里一直说着“别跑” D.小猫会碰到球,…...

HTML2.1列表标签

列表标签种类 无序列表 有序列表 自定义列表 使用场景&#xff1a;在列表中按照行展示关联性内容。 特点&#xff1a;按照行的形式&#xff0c;整齐显示内容。 一、无序列表 标签名说明ul无序列表整体&#xff0c;用于包裹li标签li表示无序列表的每一项&#xff0c;用于包…...

在 Flutter 多人视频通话中实现虚拟背景、美颜与空间音效

前言 在之前的「基于声网 Flutter SDK 实现多人视频通话」里&#xff0c;我们通过 Flutter 声网 SDK 完美实现了跨平台和多人视频通话的效果&#xff0c;那么本篇我们将在之前例子的基础上进阶介绍一些常用的特效功能&#xff0c;包括虚拟背景、色彩增强、空间音频、基础变声…...

Ambari-web 架构

Ambari-web 使用的前端 Embar.js MVC 框架实现&#xff0c;Embar.js 是一个 TodoMVC 框架&#xff0c;涵盖了单页面应用&#xff08;single page application&#xff09;几乎所有的行为 Nodejs 是一个基于 Chrome JavaScript 运行时建立的一个平台&#xff0c;用来方便的搭建…...

对接百思买Best Buy EDI 的注意事项

在此前的文章&#xff1a;《Best Buy Drop Ship(Commerce hub) EDI业务测试常见报错及解决》中&#xff0c;我们介绍了在业务测试过程中遇到的常见报错及解决方案&#xff0c;以下在此基础上进行补充。 数据未能成功发送给Best Buy可能遇到的情况 Best Buy EDI项目传输业务报…...

2023年郑州重点建设项目名单公布,中创“算力数据中心”项目入选!

4月7日&#xff0c;郑州市人民政府网站公布2023年郑州市重点建设项目名单&#xff0c;名单共列项目680个&#xff0c;总投资1.08万亿元&#xff0c;年度计划投资2691亿元。 在创新驱动能力提升项目名单里&#xff0c;中创算力与人民网人民数据&#xff08;国家大数据灾备中心&a…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...

PLC入门【4】基本指令2(SET RST)

04 基本指令2 PLC编程第四课基本指令(2) 1、运用上接课所学的基本指令完成个简单的实例编程。 2、学习SET--置位指令 3、RST--复位指令 打开软件(FX-TRN-BEG-C)&#xff0c;从 文件 - 主画面&#xff0c;“B: 让我们学习基本的”- “B-3.控制优先程序”。 点击“梯形图编辑”…...