opencv各个模块介绍(1)

目录

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

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

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

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

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


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

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

  • 33
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
opencv-4.4.0-vc14_vc15.exe 版本:4.4.0 2020年7月 OpenCV 4.x的夏季更新已发布 :晴天: 此版本的亮点: SIFT(尺度不变特征变换)算法已移至主存储库(SIFT的专利已过期) DNN模块: 改进的图层/激活/支持更多模型: 最新的Yolo v4检测器:#17148。为[yolo]层(Yolo v3和Yolo v4)禁用了每层NMS,因为它们是不正确的-用于cv::dnn::NMSBoxes所有检测。 ONNX:添加对Resnet_backbone(Torchvision)的支持#16887 EfficientDet模型支持:#17384 新样本/演示: 添加文本识别示例:C ++ / Python FlowNet2光流:#16575 英特尔®推理引擎后端(OpenVINO™): 增加了对OpenVINO 2020.3 LTS / 2020.4版本的支持 计划在下一版本中删除对NN Builder API的支持 CUDA后端中的许多修复和优化(感谢@YashasSamaga):PR G-API模块: 在OpenCV后端引入了用于状态内核的新API :GAPI_OCV_KERNEL_ST。有状态内核在各个图执行(标准中更多)或流的视频帧之间(以流模式)保留其状态。 在G-API推出更多面向视频的操作:goodFeaturesToTrack,buildOpticalFlowPyramid,calcOpicalFlowPyrLK。 添加了更多的图像处理内核:Laplacian和双边过滤器。 修复了G-API的OpenCL后端中的潜在崩溃。 OpenCV社区的许多其他伟大贡献,包括但不限于: Obj-C / Swift绑定:#17165 (opencv_contrib)Julia绑定是正在进行的GSoC项目的一部分:#2547 (opencv_contrib)BIMEF:生物启发的多重曝光融合框架,用于弱光图像增强: #2448 为CV_16UC1图像启用Otsu阈值:#16640 为文本检测添加笔划宽度变换算法:#2464 计划在Apache 2许可证上进行下一版本OE-32的 迁移#17491

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ai智享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值