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.mzph.cn/news/770444.shtml

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

相关文章

网络分层协议和应用模型

分层模型 五层网络模型 MAC地址跟IP地址的区别&#xff1a;MAC地址是唯一的&#xff0c;相当于每个人的指纹&#xff0c;出生时就是唯一的&#xff1b;IP地址就相当于是你当前的住址&#xff0c;是会发生变化的&#xff0c;但是是动态唯一的。 应用层协议 URL URL&#xff…

基于Colab训练的yolov4-tiny自定义数据集(可用于OpenCV For Unity)

参考资料文档和视频。 1.打开文档,点击【文件】【在云端硬盘中保存一份副本】,即将文档复制到自己云端硬盘。 2.打开该文件,按文中提示进行。 【代码执行程序】【更改运行时类型】修改运行时为GPU(免费的GPU不好用,收费的好用,某宝上几十元就可用一个月) 步骤1) !git…

如何调用occtproxy放入自己的wpf文件

1.创建一个wpf程序 2.添加项目occtproxy.vcxproj 3.把该项目配置类型设为dll 4.添加引用 5.报错显示&#xff0c;这是因为还没有生成dll 6.把occtproxy设为启动项目运行&#xff0c;设定输出目录在该目录下&#xff0c;生成dll 7.再运行&#xff0c;即可

一文整合工厂模式、模板模式、策略模式

为什么使用设计模式 今天终于有时间系统的整理一下这几个设计模式了&#xff0c; 这几个真是最常用的&#xff0c;用好了它们&#xff0c;你就在也不用一大堆的if else 了。能更好的处理大量的代码冗余问题。 在我们的实际开发中&#xff0c;肯定会有这样的场景&#xff1a;我…

2024年云仓酒庄新动态:铸就新篇章

原标题&#xff1a;刘总出席成都糖酒会&#xff1a;信任铸就云仓酒庄新篇章&#xff0c;共襄盛举展未来近日&#xff0c;备受瞩目的成都糖酒会盛大开幕&#xff0c;吸引了来自全国各地的业界精英和代表。在这场盛大的行业盛会上&#xff0c;云仓酒庄的刘总亲临现场。 现场&…

以XX大学校园为例的智慧能源管理系统建设方案【能源物联网+智能微电网数字校园、节能校园、低碳校园】

建设背景 贯彻落实《中共中央 国务院关于完整准确全面贯彻新发展理念做好碳达峰碳中和工作的意见》和《国务院关于印发2030年前碳达峰行动方案的通知》要求&#xff0c;把绿色低碳发展纳入国民教育体系。 2021年3月26日为推动信息技术与教育教学深度融合&#xff0c;教育部印…

2.6 IDE(集成开发环境)是什么

IDE&#xff08;集成开发环境&#xff09;是什么 IDE 是 Integrated Development Environment 的缩写&#xff0c;中文称为集成开发环境&#xff0c;用来表示辅助程序员开发的应用软件&#xff0c;是它们的一个总称。 通过前面章节的学习我们知道&#xff0c;运行 C 语言&…

eclipse导入svn项目

1、配置maven 2、用svn引入项目 3一直点击next,到最后选完成。

基于springboot的房屋租赁管理系统+数据库+免费远程调试

项目介绍: 基于springboot的房屋租赁管理系统。Javaee项目&#xff0c;springboot项目&#xff0c;采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringBoot JspMaven来实现。MyS…

Qt_day4:2024/3/25

作业1&#xff1a; 完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和…

【iOS ARKit】播放3D音频

3D音频 在前面系列中&#xff0c;我们了解如何定位追踪用户&#xff08;实际是定位用户的移动设备&#xff09;的位置与方向&#xff0c;然后通过摄像机的投影矩阵将虚拟物体投影到用户移动设备屏幕。如果用户移动了&#xff0c;则通过VIO 和 IMU更新用户的位置与方向信息&…

钡铼技术R40路由器助力构建无人值守的智能化污水处理厂

钡铼技术R40路由器作为智能化污水处理厂的关键网络设备&#xff0c;发挥着至关重要的作用&#xff0c;助力构建无人值守的智能化污水处理系统。在现代社会&#xff0c;污水处理是城市环境保护和可持续发展的重要组成部分&#xff0c;而智能化污水处理厂借助先进的技术和设备&am…

后端常问面经之Java基础

基本数据类型 Java中有8种基本数据类型&#xff1a; 6种数字类型&#xff1a; 4种整数型&#xff1a;byte、short、int、long 2种浮点型&#xff1a;float、double 1种字符类型&#xff1a;char 1种布尔类型&#xff1a;boolean 数据类型的默认值以及所占空间如下&#x…

由浅到深认识Java语言(25):正则表达式

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…

2024 Python3.10 系统入门+进阶(三):Python变量类型和运算符

目录 一、Python变量的定义和使用二、Python整数类型&#xff08;int&#xff09;详解三、Python小数/浮点数&#xff08;float&#xff09;类型详解四、Python复数类型(complex)详解---了解五、Python字符串详解(包含长字符串和原始字符串)5.1 处理字符串中的引号5.2 字符串的…

后端常见面经之JVM

JVM组成 有垃圾回收的是哪些地方&#xff1f; 垃圾回收主要是针对堆内存中的对象进行的&#xff0c;包括以下几个方面&#xff1a; 堆内存&#xff1a;垃圾回收主要针对堆内存中不再被引用的对象进行回收&#xff0c;包括新生代和老年代中的对象。 永久代/元空间&#xff1a…

Selenium 自动化 —— 切换浏览器窗口

更多内容请关注我的 Selenium 自动化 专栏&#xff1a; 入门和 Hello World 实例使用WebDriverManager自动下载驱动Selenium IDE录制、回放、导出Java源码浏览器窗口操作 平时我们在使用浏览器时&#xff0c;通常会打开多个窗口&#xff0c;然后再多个窗口中来回切换&#xf…

众邦科技CRMEB商城商业版任意文件写入getshell 0day

代码审计 接口&#xff1a;/adminapi/system/crud 处理的代码如下 public function save(SystemCrudDataService $service, $id 0){$data $this->request->postMore([[pid, 0],//上级菜单id[menuName, ],//菜单名[tableName, ],//表名[modelName, ],//模块名称[table…

手机网页视频无水印采集工具|抖音视频关键词批量下载软件

轻松获取手机网页视频无水印的神器&#xff01;让您随心所欲畅享精彩视频内容&#xff01; 随着网络视频的盛行&#xff0c;如何方便快捷地获取您感兴趣的视频内容成为一大需求。现推出一款手机网页视频无水印采集工具&#xff0c;功能强大&#xff0c;操作简便&#xff0c;助您…

[项目前置]如何用webbench进行压力测试

测试软件 采用webbench进行服务器性能测试。 Webbench是知名的网站压力测试工具&#xff0c;它是由Lionbridge公司开发。 webbench的标准测试可以向我们展示服务器的两项内容&#xff1a; 每秒钟相应请求数 和 每秒钟传输数据量 webbench测试原理是&#xff0c;创建指定数…