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

news2025/1/12 13:41:33

目录

一、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

 

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

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

相关文章

字节8年测试经验,送给想要学习自动化测试的同学6条建议

我的职业生涯开始和大多数测试人一样&#xff0c;开始接触都是纯功能界面测试。那时候在一家电商公司做测试&#xff0c;做了有一段时间&#xff0c;熟悉产品的业务流程以及熟练测试工作流程规范之后&#xff0c;效率提高了&#xff0c;工作比较轻松&#xff0c;也得到了更好的…

QML控件--Dial

文章目录一、控件基本信息二、控件使用三、属性成员四、成员函数五、信号一、控件基本信息 Import Statement&#xff1a;import QtQuick.Controls 2.14 Since&#xff1a;Qt 5.7 Inherits&#xff1a;Control 二、控件使用 Dial&#xff1a;是一个旋钮控件&#xff1b; im…

【权限维持】黄金白银票据隐藏账户C2远控RustDeskGotoHTTP

文章目录内网域&单机版-权限维持-基于用户-隐藏用户内网域-权限维持-基于服务TGT-黄金白银票据黄金方法&#xff1a;白银方法&#xff1a;内网域-权限维持-基于软件-GotoHTTP&RustDesk—无需安装C2 GotoHTTPC2 RustDesk 推荐内网域&单机版-权限维持-基于用户-隐藏用…

Plist文件是什么?

plist 文件是一种用于存储应用程序配置信息的文件格式&#xff0c;其中包含应用程序的各种设置和数据。在过去&#xff0c;plist 文件通常是以.plist 格式存储的。然而&#xff0c;随着时间的推移&#xff0c;人们开始使用.plistx 格式来存储更复杂的数据结构和数据。如果您需要…

MySQL日期时间函数汇总、时间格式转换方法

MySQL日期时间函数汇总、时间格式转换方法时间函数日期时间格式转换date_format函数EXTRACT()DATE_ADD()DATE_SUB()DATEDIFF函数时间函数 函数描述NOW()返回当前的日期和时间CURDATE()返回当前的日期CURTIME()返回当前的时间DATE()返回日期或日期/时间表达式的日期部分HOUR()获…

【遗传算法、粒子群、改进遗传算法】基于智能算法的电力系统电网最优规划方案的研究(Matlab代码实现)

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

【从零开始学Skynet】工具篇(一):Ubuntu16.04环境搭建

一、Ubuntu系统下载 为了初学者使用方便&#xff0c;我们下载的是Ubuntu16系统的桌面版本&#xff1a;下载地址 二、VirtualBox虚拟机下载 去Virtualbox官网下载:Downloads – Oracle VM VirtualBox 点击这里进行下载&#xff0c;下载完之后点击客户端进行安装&#xff0c;安装…

ros2-foxy windows下安装流程

1.系统要求 本手册安装环境为win10 x64 请确保已在系统路径中安装PowerShell。 请确保网络的通畅性 2.环境安装部分 安装Chocolatey 方案1&#xff1a; 复制以下命令行&#xff0c;使用管理员权限打开PowerShell&#xff0c;复制粘贴大法到PowerShell&#xff0c;安装好ch…

YC-A11(原创)基于springboot,vue网上商城

绪论 课题的开发背景 随着计算机和网络的快速发展&#xff0c;并且越来越普及&#xff0c;互联网日益成为人们收集信息常用渠道&#xff0c;电子商务开始流行&#xff0c;一种全新的理念不断形成并且快速发展&#xff0c;像国内电商巨头淘宝、京东、苏宁易购、唯品会等电商平台…

筑牢合规营销“防火墙”,助力四环医药实现合规营销管理能力全面进阶 | 案例研究

四环医药控股集团有限公司&#xff08;以下简称“四环医药”&#xff09;是一家集药品研发、生产和销售于一体的集团化医药企业&#xff0c;公司现拥有心脑血管疾病、肝病治疗、提高机体免疫机能、代谢及抗感染等多领域100品种。四环医药强大的营销体系及独特营销模式确保了自身…

会画画的海龟,Python Turtle库详解(27)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 欢迎和猫妹一起&#xff0c;趣味学Python。 今日主题 介绍下Python的turtle库&#xff0c;这是一个可以画画的库&#xff0c;非常适合小孩子在屏幕上画画。 先学习基础知…

Python入门教程+项目实战-9.4节: 字符串的格式化

目录 9.4.1 理解格式化 9.4.2 使用f-string进行格式化 9.4.3 使用格式化符号进行格式化 9.4.4 使用format方法进行格式化 9.4.5 知识要点 9.4.6 系统学习python 9.4.1 理解格式化 同学们比较熟悉的是磁盘格式化&#xff0c;将磁盘格式化以后&#xff0c;磁盘中的文件全部…

第10章_多线程

第10章_多线程 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 本章专题与脉络 我们之前学习的程序在没有跳转语句的情况下&#xff0c;都是由上至下沿着一条路径依次执行。现在想要设计一个程序…

Spring概述及IoC,DI的理解

目录 一、Spring 是什么&#xff1f; 1.1 什么是容器&#xff1f; 1.2 如何理解IoC&#xff1f; 1.3 理解Spring Ioc 1.4 DI是什么 1.5 回顾IoC&#xff0c;DI 1.6 IoC和DI的对比 一、Spring 是什么&#xff1f; 我们通常所说的 Spring 指的是 Spring Framework&#x…

不会写代码也能做自动化?推荐一款自动化测试神器

在软件测试这条道路上&#xff0c;大部分的职业技能发展道路都会是纯业务手工测试→自动化测试→性能测试→安全测试/测试开发。 但是却有着一部分人起初进入软件测试这一行看重的就是软件测试属于IT行业&#xff0c;门槛比较低&#xff0c;不需要代码基础。 这就导致了这一部…

数据库系列之MySQL线程ID和操作系统线程ID对应关系

在日常运维工作中&#xff0c;MySQL数据库服务器出现SQL语句执行导致服务器CPU使用率突增&#xff0c;如何通过现有手段快速定位排查到哪个SQL语句&#xff0c;并采取应急措施。本文介绍基于传统的操作系统线程的CPU使用监控手段入手&#xff0c;利用操作系统线程ID和MySQL线程…

Leetcode.1631 最小体力消耗路径

题目链接 Leetcode.1631 最小体力消耗路径 Rating &#xff1a; 1948 题目描述 你准备参加一场远足活动。给你一个二维 rows x columns的地图 heights&#xff0c;其中 heights[row][col]表示格子 (row,col)(row, col)(row,col) 的高度。一开始你在最左上角的格子 (0,0)(0, 0)…

8.Java面向对象---类、属性和方法

Java面向对象—类、属性和方法 在生活中&#xff0c;说到类&#xff0c;可以联想到类别&#xff0c;同类&#xff0c;会想到一类人&#xff0c;一类事物等等。而这一类人或事物都是具有相同特征或特点和行为的&#xff0c;我们根据不同的特征或特点和行为将他们归类或分类。同…

ActiveReportsJS 4.0 FIX ActiveReportsJS 4.0 Crack

JavaScript 报告工具是一组用于数据整合和可视化的 Web 组件。ActiveReportsJS 是前端开发人员用来在 Web 应用程序中嵌入报告的解决方案。报表设计器和查看器组件、强大的数据可视化器和丰富的 API 等主要功能使 ActiveReportsJS 成为行业领导者。 JavaScript 报告引擎 利用强…

【算法与数据结构】2 梅开二度,线性查找的究极优化

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于算法与数据结构体系专栏,本专栏对于0基础者极为友好,欢迎与我一起完成算法与数据结构的从0到1的跨越 线性查找的究极优化1.前言2.泛型1.1粗略介绍泛型类1.2使用泛型方法1…