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

【OpenCV】简介

官网
https://docs.opencv.org/4.8.0/examples.html
https://docs.opencv.org/4.8.0/modules.html

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它包含了大量的函数和算法,用于处理图像和视频数据,进行目标检测、跟踪、特征提取等任务

模块

OpenCV 库分为多个模块:opencv_core 模块包含库的核心功能,opencv_imgproc 模块 包含主要的图像处理函数,opencv_highgui 模块提供了读写图像和视频的函数以及一些用户交 互函数,等等。在使用某个模块之前,需要包含该模块对应的头文件。很多使用 OpenCV 的应用 程序会在文件的开头处声明:

    #include <opencv2/core.hpp>#include <opencv2/imgproc.hpp>#include <opencv2/highgui.hpp>

主要模块:

core:这是OpenCV的核心模块,包括基础数据类型、数组操作、内存管理、XML/YAML文件读写、图像和视频的I/O等。
imgproc:图像处理模块,包括图像滤波、几何变换、颜色空间转换、直方图计算、形态学操作、特征检测等。
highgui:用户界面和交互模块,用于显示图像、视频和用户界面控件。
videoio:视频捕获和编解码模块,用于读取、写入和处理视频文件。
calib3d:相机标定和三维重建模块,包括多视图几何算法、立体视觉、相机标定等。
features2d:二维特征检测、描述符和描述符匹配器模块。
objdetect:对象检测模块,包括人脸检测、行人检测等。
dnn:深度神经网络模块,支持多种深度学习框架,如TensorFlow、Caffe等,并提供了一些预训练的模型。
ml:机器学习模块,包含统计机器学习模型和算法,如支持向量机(SVM)、决策树、K近邻等。
flann:快速最近邻搜索模块,用于在大规模数据集中进行高效搜索。
photo:计算摄影模块,包括图像修复和去噪等功能。
stitching:图像拼接模块,用于将多个图像拼接成一个全景图。
videostab:视频稳定模块,用于减少视频中的抖动和不稳定。
optflow:光流计算模块,用于估计图像序列中的运动。
superres:超分辨率模块,用于提高图像的分辨率。
tracking:目标跟踪模块,提供了多种跟踪算法和工具。
ximgproc:扩展图像处理模块,包含一些额外的图像处理算法和功能。
xobjdetect:扩展对象检测模块,提供了额外的对象检测算法。
xphoto:扩展计算摄影模块,包含一些额外的计算摄影算法和功能。
这些模块提供了丰富的功能和算法,可以满足各种计算机视觉任务的需求。注意,OpenCV的模块可能会随着版本的更新而有所变化,建议查阅OpenCV的官方文档以获取最新和详细的信息。

OpenCV_contrib

OpenCV 的一个扩展模块集合,其中包含了大量由社区贡献的、不在主库(即 OpenCV 的核心模块)中的功能和算法。这些贡献模块提供了各种计算机视觉、图像处理和机器学习领域的先进技术和实用工具。
OpenCV_contrib 的目标是提供一个平台,让开发者能够轻松地访问和使用这些额外的功能,从而促进创新和实验。

以下是 OpenCV_contrib 中的一些主要模块和功能的概述:
aruco:提供了用于增强现实(AR)的 ArUco 标记的创建和检测功能。
bgsegm:包含了用于背景分割的算法,如统计背景图像估计和每像素的贝叶斯分割。
bioinspired:实现了受生物学启发的计算机视觉模型和方法。
cnn_3dobj:使用卷积神经网络(CNN)进行3D对象识别。
cvv:OpenCV 的可视化工具,用于调试和分析。
datasets:包含用于不同计算机视觉任务的数据集读取器。
dnn_objdetect:使用深度神经网络进行对象检测。
dpm:可变形部件模型(Deformable Part Models),用于对象检测。
face:提供面部识别和面部特征点检测功能。
freetype:使用 FreeType 库渲染文本。
fuzzy:实现了模糊逻辑和模糊系统。
hdf:用于读取和写入 HDF5 文件格式的接口。
img_hash:图像哈希算法,用于图像检索和相似性比较。
line_descriptor:用于二值图像的描述符提取和匹配。
matlab:提供与 MATLAB 的兼容性功能。
optflow:光流算法集合,用于估计视频序列中的运动。
phase_unwrapping:相位解包裹算法,用于从相位图像中恢复绝对相位。
plot:绘图功能,用于可视化数据和结果。
reg:图像配准方法,用于对齐图像。
rgbd:RGB-D(彩色+深度)图像处理功能。
saliency:显著性检测算法,用于确定图像中最引人注意的区域。
stereo:立体视觉算法,用于从立体图像对中恢复深度信息。
structured_light:结构光模式生成和分析工具。
surface_matching:3D 表面匹配算法。
text:文本检测和识别功能。
tracking:对象跟踪算法集合。
xfeatures2d:额外的 2D 特征检测器和描述符提取器。
ximgproc:扩展的图像处理功能。
xobjdetect:扩展的对象检测算法。
xphoto:计算摄影和图像增强技术。

使用 OpenCV_contrib:
要使用 OpenCV_contrib 中的模块,你通常需要在编译 OpenCV 时启用它们。这通常涉及在配置步骤中设置特定的标志,以指示构建系统包含这些额外模块。一些模块可能还有额外的依赖项,需要在安装之前单独安装。

矩阵接口

在OpenCV中,矩阵(Mat)是一个基本的数据结构,用于存储图像、特征点、变换矩阵等。
OpenCV的矩阵接口主要包括以下几个方面:

创建和初始化矩阵:

cv::Mat::Mat():构造函数,用于创建矩阵。
cv::Mat::zeros():创建一个全零矩阵。
cv::Mat::ones():创建一个全一矩阵。
cv::Mat::eye():创建一个单位矩阵。
cv::Mat::create():为矩阵分配内存。

矩阵的基本操作:

cv::Mat::clone():复制矩阵。
cv::Mat::copyTo():将矩阵复制到另一个矩阵中(可能带有掩码)。
cv::Mat::setTo():设置矩阵的所有或部分元素为特定值。
cv::Mat::reshape():改变矩阵的形状而不改变数据。
cv::Mat::transpose():转置矩阵。
cv::Mat::inv() 或 cv::invert():计算矩阵的逆。
cv::Mat::mul():执行矩阵的逐元素乘法或矩阵乘法。
cv::Mat::dot():计算两个向量的点积。
cv::Mat::cross():计算两个3D向量的叉积。

矩阵的访问和修改:

cv::Mat::at(int y, int x):访问矩阵中的元素。
cv::Mat::ptr(int i):获取矩阵的指定行的指针。
cv::Mat::begin() 和 cv::Mat::end():获取矩阵的迭代器。
cv::Mat::row() 和 cv::Mat::col():获取矩阵的行或列。
cv::Mat::rowRange() 和 cv::Mat::colRange():获取矩阵的行或列的范围。
cv::Mat::diag():获取或设置矩阵的对角线。

矩阵的信息查询:

cv::Mat::type():返回矩阵元素的数据类型。
cv::Mat::depth():返回矩阵元素的数据深度的位数。
cv::Mat::channels():返回矩阵的通道数。
cv::Mat::size():返回矩阵的尺寸(行数和列数)。
cv::Mat::total():返回矩阵中的元素总数。
cv::Mat::isContinuous():检查矩阵是否连续存储。
cv::Mat::empty():检查矩阵是否为空。

算术运算

加法 (cv::add):
两个矩阵的逐元素相加。
也可以使用运算符重载 (+)。

减法 (cv::subtract):
两个矩阵的逐元素相减。
也可以使用运算符重载 (-)。

乘法 (cv::multiply 或 cv::matMul):
cv::multiply 用于逐元素相乘(Hadamard积)。
cv::matMul 用于矩阵乘法(线性代数中的矩阵相乘)。
运算符重载 (*) 通常用于逐元素相乘,但需要注意矩阵的类型和维度。

除法 (cv::divide):
两个矩阵的逐元素相除。
也可以使用运算符重载 (/),但需要注意数据类型和除数为零的情况。

缩放与加法 (cv::scaleAdd):
将一个矩阵缩放后与另一个矩阵相加。

逻辑运算

逻辑与 (cv::bitwise_and):
对两个矩阵执行逐元素的逻辑与操作。
也可以使用运算符重载 (&)。

逻辑或 (cv::bitwise_or):
对两个矩阵执行逐元素的逻辑或操作。
也可以使用运算符重载 (|)。

逻辑非 (cv::bitwise_not):
对矩阵的每个元素执行逻辑非操作。
也可以使用运算符重载 (~),但需要注意数据类型和符号扩展。

逻辑异或 (cv::bitwise_xor):
对两个矩阵执行逐元素的逻辑异或操作。
也可以使用运算符重载 (^)。

比较运算:
OpenCV提供了一系列比较函数,如cv::cmpEQ, cv::cmpGT, cv::cmpGE, cv::cmpLT, cv::cmpLE等,用于逐元素的比较操作,生成一个相同大小的布尔矩阵(在OpenCV中通常用8位无符号整数表示,0表示false,非0表示true)。
这些操作在图像处理中非常有用,例如用于图像融合、掩码操作、阈值处理、图像分割等任务。在使用这些函数时,需要注意矩阵的数据类型、大小和通道数,以确保操作的正确性和有效性。

矩阵的输入/输出:

使用cv::imread()和cv::imwrite()函数可以读取和保存图像文件,这些图像在OpenCV中是以矩阵形式存储的。
使用cv::FileStorage类可以将矩阵保存到XML或YAML文件中,或从这些文件中读取矩阵。

矩阵的其他操作:

cv::split():将多通道矩阵分割成多个单通道矩阵。
cv::merge():将多个单通道矩阵合并成一个多通道矩阵。
cv::mixChannels():在输入数组之间提供先进的通道混合功能。
cv::extractChannel() 和 cv::insertChannel():提取或插入矩阵的特定通道。
cv::cartToPolar() 和 cv::polarToCart():进行笛卡尔坐标和极坐标之间的转换。
cv::dft() 和 cv::idft():进行离散傅里叶变换和反变换。
cv::PCA 类:进行主成分分析。
cv::SVD 类:进行奇异值分解。
cv::solve():解线性方程组或最小二乘问题。
cv::eigen():计算方阵的特征值和特征向量。

http://www.lryc.cn/news/2412623.html

相关文章:

  • 医学图像中的窗宽(Window Width,WW)和窗位(Window Level,WL)
  • Stream 流常见基本操作
  • ApiPost简介
  • Canvas详解
  • eclipse下载|安装|项目创建|常规设置|详细图文教程【windows10】
  • spring太强了!两万多字干货 超详细讲解
  • Kafka最全讲解,通俗易懂
  • PostgreSQL教程(三):SQL语言
  • Fiddler工具介绍及基本使用
  • axios 开源项目教程
  • Vue 3 中实现 Element Plus 表格的多选功能与条件操作(附Demo)
  • 微信开发者工具
  • 创建虚拟机步骤以及开启电脑虚拟设置方法
  • 大数据入门系列 1:全网最全,Windows 安装 VMware Workstation 虚拟机完整步骤及需要注意的问题
  • SpringBoot--入门使用
  • Node入门
  • 介绍Vant入门及使用方法
  • 国产化的接口测试、接口自动化测试工具apifox的介绍及使用
  • C/C++之(一)洛谷刷题及洛谷评测
  • 抓包工具(二)Wireshark 的下载、安装、使用、快捷键
  • Json文件格式化方法
  • Node.js环境配置
  • 【系统功能开发篇】若依管理系统功能介绍
  • nodejs详细安装步骤(保姆级教程)
  • poj 1204 Word Puzzles
  • 测试基础---测试用例01
  • 1350. 院系无效的学生 1355. 活动参与者 1369. 获取最近第二次的活动 1378. 使用唯一标识码替换员工ID1398. 购买了产品 A 和产品 B 却没有购买产品 C 的顾客
  • eCharts基础详解
  • Vscode 配置C/C++开发环境
  • 我用两个月时间,终于把CSDN付费资源项目玩明白了!