opencv各个模块介绍(1)

Core 模块:核心模块,提供了基本的数据结构和功能。

常用的核心函数:

  1. cv::Mat:表示多维数组的数据结构,是OpenCV中最常用的类之一,用于存储图像数据和进行矩阵运算。

  2. cv::Scalar:用于表示多通道数据的标量,通常用于颜色表示。

  3. cv::Size:用于表示二维空间中的尺寸大小,常用于图像尺寸的表示。

  4. cv::Pointcv::Point2f:用于表示二维空间中的点坐标

  5. cv::Rect:用于表示二维平面上的矩形区域

  6. cv::Range:用于表示一维数据的范围

  7. cv::Mat_< >:模板类,用于创建特定类型的矩阵

  8. cv::splitcv::merge:用于通道分离和合并操作。

  9. cv::cvtColor:用于颜色空间转换,例如RGB到灰度、RGB到HSV等。

  10. cv::resize:用于图像缩放操作。

  11. cv::flip:用于图像翻转操作。

  12. cv::transpose:用于矩阵转置操作。

Imgproc 模块:图像处理模块,包括图像过滤、几何变换等功能。

  1. 图像滤波函数:

    • cv::GaussianBlur:高斯模糊。
    • cv::medianBlur:中值滤波。
    • cv::bilateralFilter:双边滤波。

高斯模糊(Gaussian Blur)是图像处理中常用的一种平滑滤波方法,它利用了高斯函数的特性对图像进行模糊处理。在OpenCV中,cv::GaussianBlur函数就是用来实现高斯模糊的。

高斯模糊的原理如下:

  1. 对图像中的每个像素,以该像素为中心取一个固定大小的邻域(通常是一个正方形或矩形区域)。
  2. 对这个邻域内的所有像素值按照高斯分布进行加权平均,即距离中心像素越远的像素权重越小。
  3. 最后将加权平均后的值赋给中心像素,从而实现模糊效果。

高斯模糊的主要思想是利用高斯函数对像素值进行加权平均,使得图像中的噪声被平滑掉,同时保留图像的整体结构和边缘信息,避免产生锐化等不良效果。

高斯模糊的核(Kernel)由一个二维的高斯函数构成,通常是一个正态分布曲线。核的大小(即邻域的大小)以及标准差(控制高斯函数的宽度)可以影响模糊的程度,一般情况下,标准差越大,模糊效果越明显。

双边滤波的原理如下:

  1. 对图像中的每个像素,以该像素为中心取一个固定大小的邻域。
  2. 对这个邻域内的所有像素值进行加权平均,权重由两部分组成:
    • 空间上的权重:根据像素之间的空间距离计算得出,距离越近的像素权重越大。
    • 强度上的权重:根据像素值之间的差异计算得出,差异越小的像素权重越大。
  3. 最后将加权平均后的值赋给中心像素,从而实现平滑效果。

双边滤波相比于传统的高斯模糊具有更好的性能,因为它考虑了像素之间的空间关系和强度差异,能够保留图像中的边缘信息,同时对噪声有一定的抑制效果。这使得双边滤波在保持图像细节的同时进行平滑处理时非常有用。

需要注意的是,双边滤波的计算量相对较大,因此在实际应用中需要考虑其计算开销。

  1. 边缘检测函数:

    • cv::Canny:Canny边缘检测算法。
    • cv::Sobel:Sobel边缘检测算子。
    • cv::Scharr:Scharr边缘检测算子。

在 Canny 边缘检测算法的实现遵循以下步骤:

  1. 高斯模糊(Gaussian Blur): 首先对输入的图像进行高斯平滑处理,以减少噪声对边缘检测的影响。OpenCV 提供了 cv::GaussianBlur 函数用于执行高斯滤波。

  2. 计算梯度: 使用 Sobel 算子计算图像在水平和垂直方向上的梯度。OpenCV 中的 cv::Sobel 函数可用于计算图像的梯度。

  3. 非极大值抑制: 对梯度图像进行非极大值抑制,保留局部梯度最大的像素值,以细化边缘。这一步确保只有边缘上的像素点被保留。

  4. 双阈值处理: Canny 边缘检测使用两个阈值来确定强边缘和弱边缘。OpenCV 中可以使用 cv::Canny 函数指定这两个阈值。像素梯度高于高阈值的被认为是强边缘,低于低阈值的被认为是弱边缘。

  5. 边缘跟踪: 在这一步中,通过连接强边缘像素,将其与周围的弱边缘像素关联起来,形成完整的边缘。OpenCV 的 cv::Canny 函数会执行这一步骤,并输出最终的边缘图像。

总的来说,OpenCV 中的 Canny 边缘检测函数 cv::Canny 实现了 Canny 边缘检测算法的全部流程,用户可以通过设置参数来调整阈值和其他参数,以获取他们需要的边缘检测结果。

sobel 边缘检测是通过 Sobel 算子来实现的。Sobel 算子是一种经典的边缘检测算子,用于计算图像在水平方向和垂直方向的梯度,进而找到图像中的边缘位置。

  1. 图像转换函数:

    • cv::resize:图像缩放。
    • cv::warpAffine:仿射变换。
    • cv::warpPerspective:透视变换。

warpAffine 用于对图像进行仿射变换的函数。仿射变换是一种线性变换,可以保持图像中的直线在变换后仍然保持直线。warpAffine 函数可以通过指定变换矩阵来实现平移、旋转、缩放和剪切等操作。该函数的原理如下:

  1. 构建变换矩阵: 在进行仿射变换之前,首先需要构建一个 2x3 的变换矩阵,通常称为仿射矩阵。矩阵包含了平移、旋转、缩放和剪切等变换的参数。变换矩阵的形式| a b c | | d e f |其中 a 和 e 控制缩放和旋转,b 和 d 控制剪切,c 和 f 控制平移。

  2. 应用变换矩阵: 得到变换矩阵,warpAffine 函数将使用这个变换矩阵来对图像进行仿射变换。对于输入图像中的每个像素,通过变换矩阵计算出其在输出图像中的位置,并根据插值方法得到输出图像中对应位置的像素值。

    可以使用不同的插值方法,如最近邻插值、双线性插值或立方插值,来计算输出图像中的像素值。这些插值方法可以帮助保持图像质量和准确性。

warpAffine 函数可以实现对图像的平移、旋转、缩放和剪切等仿射变换操作。这在图像处理、计算机视觉和机器学习等领域中都有广泛的应用。

warpPerspective 函数用于执行透视变换,允许您在图像中执行更一般化的几何变换,而不仅限于仿射变换。透视变换可以将图像从一个透视空间映射到另一个透视空间,常用于校正图像中的透视畸变或执行图像矫正。

warpPerspective 函数的原理:

  1. 构建透视变换矩阵: 进行透视变换之前,需要构建一个 3x3 的透视变换矩阵。这个矩阵包含了透视变换所需的所有参数,包括旋转、平移、缩放和投影等操作| a b c | | d e f | | g h i |

    对于透视变换,变换矩阵有更多的自由度,可以表示更广泛的变换操作。

  2. 应用透视变换矩阵: 得到了透视变换矩阵,warpPerspective 函数将使用这个矩阵来对图像进行透视变换。对于输入图像中的每个像素,通过透视变换矩阵计算出其在输出图像中的位置,并根据插值方法得到输出图像中对应位置的像素值。

    warpAffine 不同,warpPerspective 允许更一般化的透视变换,可以处理更复杂的图像变换需求,如图像校正、虚拟视点生成等。

  1. 直方图函数:

    • cv::calcHist:计算图像直方图。
    • cv::equalizeHist:直方图均衡化。

图像直方图是对图像中像素灰度级别的统计信息,它可以帮助我们了解图像的对比度、亮度分布等特征。

  1. 形态学操作函数:

    • cv::erode:腐蚀操作。
    • cv::dilate:膨胀操作。
    • cv::morphologyEx:形态学操作函数。
  2. 阈值处理函数:

    • cv::threshold:图像阈值处理。
    • cv::adaptiveThreshold:自适应阈值处理。
  3. 轮廓检测函数:

    • cv::findContours:查找图像中的轮廓。
    • cv::drawContours:绘制轮廓。
  4. 几何变换函数:

    • cv::getAffineTransform:获取仿射变换矩阵。
    • cv::getPerspectiveTransform:获取透视变换矩阵。

Video 模块:视频处理模块,提供了视频捕获、光流估计等功能。

  1. VideoCapture:这是一个用于从摄像头、视频文件或图像序列中读取视频数据的类。使用 VideoCapture 类可以很方便地获取视频帧并进行后续处理。

  2. VideoWriter:这是一个用于将视频帧写入视频文件的类。通过 VideoWriter 类,我们可以将处理后的视频帧保存为视频文件,以便之后进行播放或其他用途。

  3. BackgroundSubtractor:OpenCV 提供了多种背景减除算法的实现,用于从视频中提取前景目标。常见的算法包括 MOG2、KNN 等,可以通过创建相应的背景减除器对象来进行前景提取。

  4. DenseOpticalFlow密集光流估计是一种用于分析图像中像素运动的技术。OpenCV 提供了多种密集光流算法的实现,如 Farneback 光流算法等,在 Video 模块中可以找到相应的函数。

  5. CamShift:这是一种基于颜色直方图投影的目标跟踪算法,通过不断更新目标区域的位置和大小来实现目标的跟踪。

  6. KalmanFilter:卡尔曼滤波器是一种用于估计系统状态的滤波器,常用于目标跟踪和运动预测等任务。OpenCV 提供了 Kalman 滤波器的实现。

HighGUI 模块:图形用户界面模块,用于创建简单的GUI应用程序。

OpenCV 中的 HighGUI 模块提供了一些用于图形用户界面(GUI)操作的函数,包括显示图像、创建窗口、处理鼠标事件等。以下是一些常用的 OpenCV HighGUI 模块函数和类:

  1. imshow:该函数用于在窗口中显示图像。我们可以使用这个函数来显示处理后的图像,便于可视化和调试。

  2. waitKey:这个函数通常与 imshow 配合使用,用于等待用户按键输入。可以通过设置参数来控制等待时间,从而实现暂停或延时显示图像。

  3. destroyWindowdestroyAllWindows:分别用于关闭指定窗口和关闭所有窗口。在图像显示完成后,使用这些函数可以释放窗口资源。

  4. namedWindow:用于创建一个指定名称的窗口,可以设置窗口的属性,如大小、标志等。

  5. setMouseCallback:允许在窗口上设置鼠标事件的回调函数,例如捕获鼠标点击、移动等事件,用于交互式操作。

  6. createTrackbar:用于在窗口中创建一个滑动条,可以通过滑动条来调整图像处理过程中的参数,如阈值、滤波器参数等。

  7. selectROI:用于在图像上选择感兴趣区域(ROI),通常用于目标跟踪、目标检测等任务。

Objdetect 模块:对象检测模块,包括Haar级联检测器等功能。

Objdetect 模块提供了用于对象检测和识别的函数和类,包括基于机器学习的目标检测器和一些帮助函数。以下是一些常用的 OpenCV Objdetect 模块函数和类:

  1. CascadeClassifier:一个用于加载 Haar 级联分类器文件并进行对象检测的类。Haar 级联分类器是一种经典的目标检测算法,通常用于人脸检测等任务。

  2. HOGDescriptor:这个类实现了支持向量机(SVM)和直方图梯度(HOG)特征的对象检测器。HOG 特征在行人检测等任务中表现良好。

  3. groupRectangles:用于对检测到的矩形区域进行合并和过滤,通常用于对目标检测结果进行后处理

  4. QRCodeDetector:用于检测和解码二维码的类,可以识别图像中的 QR 码信息。

  5. BaseCascadeClassifier:这是 CascadeClassifier 的基类,用于加载和解析级联分类器文件,支持其他类型的级联分类器。

  6. detectMultiScale:这是用于在图像中多尺度检测对象的函数,可用于检测不同尺度下的目标对象。

  7. QRCodeDetector.detectAndDecode:结合了检测和解码二维码的功能,可以一步完成二维码的检测和解码操作。

这些函数和类提供了在图像中进行对象检测和识别的基本工具,通过使用它们,我们可以加载训练好的分类器文件,对图像进行目标检测,并获取检测结果。同时,还可以针对检测结果进行一些后处理操作,以提高检测的准确性和鲁棒性。

备注:级联分类器

级联分类器(Cascade Classifier)是一种基于 Haar 特征的对象检测方法,最早由 Paul Viola 和 Michael Jones 提出,并被广泛用于人脸检测等领域。级联分类器采用级联结构,由多个级联的分类器组成,每个分类器用来检测图像中某个特定的目标或特征。

级联分类器的主要特点包括:

  1. Haar 特征:级联分类器使用 Haar 特征来描述图像中的局部区域,这些特征是基于图像灰度值的矩形区域差异计算得到的。Haar 特征能够有效地描述目标物体的纹理和边缘等特征。

  2. 强分类器:级联分类器由多个强分类器组成,每个强分类器都是基于 AdaBoost 算法训练得到的,可以有效地区分目标物体和背景。

  3. 级联结构:级联分类器采用级联结构,每个级联中包含若干个强分类器,只有当前一个强分类器通过之后,才会进入下一个强分类器的检测。这种级联结构能够快速排除负样本,提高检测速度。

  4. 快速检测:级联分类器在检测时采用多尺度滑动窗口的方式,通过对图像进行多次扫描和缩放,可以在不同尺度下检测目标,同时保持较高的检测准确率。

级联分类器在对象检测领域有着较好的性能和实时性能,特别适用于需要快速准确地检测目标对象的场景,如人脸检测、行人检测等。通过训练和优化级联分类器,可以实现高效的目标检测系统。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mac下Appuim环境安装-持续更新中

参考资料 Mac安装Appium_mac电脑安装appium-CSDN博客 安卓测试工具&#xff1a;Appium 环境安装&#xff08;mac版本&#xff09;_安卓自动化测试mac环境搭建-CSDN博客 1. 基本环境依赖 1 node.js 2 JDK&#xff08;Java JDK&#xff09; 3 Android SDK 4 Appium&#x…

51单片机学习9 串口通讯

51单片机学习9 串口通讯 一、串口通讯简介UARTSTC89C51RC/RD的串口资源 二、51单片机串口介绍1. 内部结构2. 寄存器&#xff08;1&#xff09;串口控制寄存器SCON&#xff08;2&#xff09;电源控制寄存器PCON 3. 计算波特率4. 串口配置步骤 三、 开发示例1. 硬件电路2. 代码实…

好用的GPTs:指定主题搜索、爬虫、数据清洗、数据分析自动化

好用的GPTs&#xff1a;指定主题搜索、爬虫、数据清洗、数据分析自动化 Scholar&#xff1a;搜索 YOLO小目标医学方面最新论文Scraper&#xff1a;爬虫自动化数据清洗数据分析 点击 Explore GPTs&#xff1a; Scholar&#xff1a;搜索 YOLO小目标医学方面最新论文 搜索 Scho…

超过 1200 个能够拦截在野外检测到的 2FA 的网络钓鱼工具包

超过 1200 个能够拦截在野外检测到的 2FA 的网络钓鱼工具包。 #################### 免责声明&#xff1a;工具本身并无好坏&#xff0c;希望大家以遵守《网络安全法》相关法律为前提来使用该工具&#xff0c;支持研究学习&#xff0c;切勿用于非法犯罪活动&#xff0c;对于恶…

【计算机】——51单片机

单片机是一种内部包含CPU、存储器和输入/输出接口等电路的集成电路&#xff08;IC芯片&#xff09; 单片机是单片微型计算机&#xff08;Single Chip Microcomputer&#xff09;的简称&#xff0c;用于控制领域&#xff0c;所以又称为微型控制器&#xff08;Microcontroller U…

Eureka的介绍和作用,以及搭建

一、Eureka的介绍和作用 Eureka是Netflix开源的一种服务发现和注册工具&#xff0c;它为分布式系统中的服务提供了可靠的服务发现和故障转移能力。Eureka是Netflix的微服务架构的关键组件之一&#xff0c;它能够实时地监测和管理服务实例的状态和可用性。 在Eureka架构中&…

学成在线_视频处理_视频转码不成功

问题 当我们用xxljob进行视频处理中的转码操作时会发现视频转码不成功。即程序会进入下图所示的if语句内。 问题原因 在进行视频转码时程序会调用Mp4VideoUtil类下的 generateMp4方法&#xff0c;而result接收的正是该方法的返回值。那么什么时候generateMp4方法的返回值会…

SQLiteC/C++接口详细介绍sqlite3_stmt类(七)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;六&#xff09; 下一篇&#xff1a; 无 22、sqlite3_column_database_name 用于返回结果集中指定列的数据库名称。如果结果集是由多个Join操作产生的&#xff0c;…

抖音视频关键词爬虫批量采集软件|视频提取下载工具

视频关键词批量采集软件 — 助力您快速获取所需视频 主要功能&#xff1a; 关键词批量提取视频和单独视频提取&#xff0c;提取后下载功能。 功能解析&#xff1a; 1. 关键词批量提取视频的解析 通过输入关键词进行视频搜索和提取。例如&#xff0c;输入“汽车配件”&#x…

四种最新算法(冠豪猪优化算法CPO、鳑鲏鱼优化算法BFO、河马优化算法HO、新雀优化算法NOA)求解机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人&#xff08;Mobile robot&#xff0c;MR&#xff09;的路径规划是 移动机器人研究的重要分支之&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

npm ERR! code ELIFECYCLE 解决办法

npm ERR! code ELIFECYCLE 解决办法 问题分析可能原因解决方法 问题 使用Vue脚手架构建项目的时候出现npm ERR! code ELIFECYCLE 分析可能原因 vue-cli-service 并没有加入到环境变量里 解决方法 ./node_modules/.bin/vue-cli-service serve

【Linux】多线程编程基础

&#x1f4bb;文章目录 &#x1f4c4;前言&#x1f33a;linux线程基础线程的概念线程的优缺点线程与进程的区别 线程的创建 &#x1f33b;linux线程冲突概念互斥锁函数介绍加锁的缺点 &#x1f4d3;总结 &#x1f4c4;前言 无论你是否为程序员&#xff0c;相信多线程这个词汇应…

MySQL之体系结构和基础管理

前言 本文以linux系统的MySQL为例详细介绍MySQL的体系结构&#xff0c;因为在实际生产环境中MySQL的运行环境都是linux系统。同时介绍MySQL的基础管理&#xff0c;包括用户管理和权限管理等。 MySQL体系结构 MySQL客户端/服务器工作模型 MySQL是C/S架构&#xff0c;工作模型…

Ribbon知识点

1、通过类实现重写Ribbon规则 1.1注意 这个类一定不能跟启动类放在同一个包下面&#xff0c;不能被componentScan给扫描到。 需要如图放置&#xff1a; 要是被componentScan给扫描到&#xff0c;则会被所有的服务提供方所共享&#xff0c;那么就不能实现指定服务用不同的Ribbo…

pycharm中的Mark Directory As 里的 Sources Root、Excluded...

这里主要提到两个文件夹的作用&#xff0c;分别是Sources Root、Excluded 1、Sources Root 1、场景 平时使用pycharm&#xff0c;有时出现导包问题&#xff0c;将那个目录Mark Directory as sources root&#xff0c;然后就可以正常运行代码了 2、原理 其实主要就是将那个目录…

官宣|阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会

摘要&#xff1a;本文整理自阿里云开源大数据平台徐榜江 (雪尽)&#xff0c;关于阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会&#xff0c;内容主要分为以下四部分&#xff1a; 1、Flink CDC 新仓库&#xff0c;新流程 2、Flink CDC 新定位&#xff0c;新玩法 3、Flin…

从相机空间到像素空间的投影和反投影原理和代码

目录 从相机空间到像素空间的投影 效果 ​编辑 公式 ​编辑 代码 像素空间到相机空间的反投影 记录一下从相机空间到像素空间的投影&#xff08;3D-->2D&#xff09;和像素空间到相机空间的反投影&#xff08;2D-->3D&#xff09;。 推荐blog&#xff1a;SLAM入门之视…

Leetcode 684. 冗余连接

心路历程&#xff1a; 最开始的想法是把环给破开就行&#xff0c;思路&#xff1a;建图&#xff0c;遍历找环&#xff0c;然后找到edges里属于环的一个边&#xff1b;每次不选择上一步走过的边&#xff0c;DFS&#xff0c;需要回溯。后来查阅资料发现这道题适合用一个叫并查集…

那些场景需要额外注意线程安全问题

主要学习那些场景需要额外注意线程安全问题&#xff0c;在这里总结了四中场景。 访问共享变量或资源 第一种场景是访问共享变量或共享资源的时候&#xff0c;典型的场景有访问共享对象的属性&#xff0c;访问static静态变量&#xff0c;访问共享的缓存&#xff0c;等等。因为…

旅游小程序的市场与发展趋势

随着科技的发展&#xff0c;移动互联网已经成为我们生活中不可或缺的一部分。在这个时代&#xff0c;小程序已经成为了一种新的趋势&#xff0c;尤其是在旅游行业。那么&#xff0c;旅游小程序有哪些市场&#xff0c;发展趋势又怎么样呢&#xff1f; 一、旅游小程序的市场 1. 用…
最新文章