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.rhkb.cn/news/285472.html

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

相关文章

Python综合实战案例-数据清洗分析

写在前面&#xff1a; 本次是根据前文讲解的爬虫、数据清洗、分析进行的一个纵隔讲解案例&#xff0c;也是对自己这段时间python爬虫、数据分析方向的一个总结。 本例设计一个豆瓣读书数据⽂件&#xff0c;book.xlsx⽂件保存的是爬取豆瓣⽹站得到的图书数据&#xff0c;共 6067…

瑞芯微RK3576|触觉智能:开启科技新篇章

更多产品详情可关注深圳触觉智能官网&#xff01; “瑞芯微&#xff0c;创新不止步&#xff01;”——全新芯片RK3576即将震撼登场。指引科技风潮&#xff0c;创造未来无限可能&#xff01;这款芯片在瑞芯微不断创新和突破的道路上&#xff0c;不仅是对过往成就的完美延续&…

填补市场空白,Apache TsFile 如何重新定义时序数据管理

欢迎全球开发者参与到 Apache TsFile 项目中。 刚刚过去的 2023 年&#xff0c;国产开源技术再次获得国际认可。 2023 年 11 月 15 日&#xff0c;经全球最大的开源软件基金会 ASF 董事会投票决议&#xff0c;时序数据文件格式 TsFile 正式通过&#xff0c;直接晋升为 Apache T…

基于傅里叶描述子的手势动作识别,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

AI之Suno:Suno V3的简介、安装和使用方法、案例应用之详细攻略

AI之Suno&#xff1a;Suno V3的简介、安装和使用方法、案例应用之详细攻略 目录 Suno AI的简介 1、特点与改进&#xff1a; Suno AI的安装和使用方法 1、第一步&#xff0c;让国产大模型—ChatGLM4帮我写一个提示词 2、第二步&#xff0c;将提示词交给Suno v3&#xff0c;…

阿里云倚天服务器是什么?倚天服务器c8y、g8y和r8y详细介绍

阿里云倚天云服务器CPU采用倚天710处理器&#xff0c;租用倚天服务器c8y、g8y和r8y可以享受优惠价格&#xff0c;阿里云服务器网aliyunfuwuqi.com整理倚天云服务器详细介绍、倚天710处理器性能测评、CIPU架构优势、倚天服务器使用场景及生态支持&#xff1a; 阿里云倚天云服务…

FastAPI+React全栈开发02 什么是FARM技术栈

Chapter01 Web Development and the FARM Stack 02 What is the FARM stack and how does it fit together? FastAPIReact全栈开发02 什么是FARM技术栈 It is important to understand that stacks aren’t really special, they are just sets of technologies that cover…

脚本实现Ubuntu设置屏幕无人操作,自动黑屏

使用 xrandr 命令可以实现对屏幕的控制&#xff0c;包括调整分辨率、旋转屏幕以及关闭屏幕等。要实现 Ubuntu 设置屏幕在无人操作一段时间后自动黑屏&#xff0c;非待机&#xff0c;并黑屏后点击触摸屏可以唤醒屏幕&#xff0c;可以借助 xrandr 命令来实现。 首先&#xff0c;…

docker 本地机 互通文件

查询容器name 查询容器Id 进行传输

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

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

WSL下Ubuntu+RTX4090安装CUDA+cuDnn+Pytorch

安装驱动 首先需要明确的是&#xff0c;在WSL下安装Ubuntu&#xff0c;如果要使用主机的GPU卡&#xff0c;只需要在主机Windows上安装驱动&#xff0c;Linux中不需要安装驱动&#xff0c;可以在Linux中使用nvidia-smi命令查看驱动版本。 安装CUDA 避坑注意事项&#xff1a;如…

【框架】说一说 Fork/Join?

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习Java框架 个性签名&#xff1a;人生乏味啊&#xff0c;我欲令之光怪陆离 本文封面由 凯楠&#x1f4f7; 友情赞助 目录 前言 什么是 Fork&#xff1f; 什么是 Join&#xff1f; Fork/Join 的核心组件 F…

流畅的 Python 第二版(GPT 重译)(二)

第三章&#xff1a;字典和集合 Python 基本上是用大量语法糖包装的字典。 Lalo Martins&#xff0c;早期数字游牧民和 Pythonista 我们在所有的 Python 程序中都使用字典。即使不是直接在我们的代码中&#xff0c;也是间接的&#xff0c;因为dict类型是 Python 实现的基本部分。…

酷开系统让用户和电视双向传递,酷开科技实现商业变现

电视在我们的日常生活中扮演着重要的角色。虽然&#xff0c;作为客厅C位的扛把子——电视的娱乐作用深入人心&#xff0c;但是&#xff0c;它的涵义和影响力却因我们每个人的具体生活环境而存在着种种差异&#xff0c;而我们的生活环境又受到我们所处的社会及文化环境的影响。 …

毕业设计:日志记录编写(3/17起更新中)

目录 3/171.配置阿里云python加速镜像&#xff1a;2. 安装python3.9版本3. 爬虫技术选择4. 数据抓取和整理5. 难点和挑战 3/241.数据库建表信息2.后续进度安排3. 数据处理和分析 3/17 当前周期目标&#xff1a;构建基本的python环境&#xff1a;运行爬虫程序 1.配置阿里云pytho…

B端设计:如何让UI组件库成为助力,而不是阻力。

首发2023-09-24 15:42贝格前端工场 Hi&#xff0c;我是大千UI工场&#xff0c;网上的UI组件库琳琅满目&#xff0c;比如elementUI、antdesign、iview等等&#xff0c;甚至很多前端框架&#xff0c;也出了很多UI组件&#xff0c;如若依、Layui、bootstrap等等&#xff0c;作为U…

工具分享丨分析GreatSQL Binglog神器

在GreatSQL中&#xff0c;Binlog可以说是 GreatSQL 中比较重要的日志了&#xff0c;在日常开发及运维过程中经常会遇到。Binlog即Binary Log&#xff0c;二进制日志文件&#xff0c;也叫作变更日志&#xff08;Update Log&#xff09;。 详细Binglog日志介绍 Binglog主要应用…

包含多个段的程序

文章目录 包含多个段的程序在代码段中使用数据在代码段中使用栈将数据、代码、栈放入不同的段 包含多个段的程序 在代码段中使用数据 考虑这样一个问题&#xff0c;编程计算以下8个数据的和&#xff0c;结果存在ax 寄存器中&#xff1a;0123H&#xff0c;0456H&#xff0c;07…

性能测试-Jmeter中IF控制器使用

一、Jmeter控制器 分为两种类型&#xff1a; 控制测试计划执行过程中节点的逻辑执行顺序&#xff0c;如&#xff1a;循环控制器&#xff0c;if控制器等对测试计划中的脚本进行分组&#xff0c;方便Jmeter统计执行结果以及进行脚本的运行时控制等&#xff0c;如&#xff1a;吞…

Mysql数据库的SQL语言详解

目录 一、数据库的基础操作 1、数据库的基本查看和切换 1.1 查看数据库信息 1.2 切换数据库 1.3 查看数据库中的表信息 1.4 查看数据库或数据库中表的结构&#xff08;字段&#xff09; 1.5 数据类型 1.5.1 整数型 1.5.2 浮点型(float和double) 1.5.3 定点数 1.5.4…