首页 > 其他分享 >OpenCV(cv::dilate())

OpenCV(cv::dilate())

时间:2024-09-14 13:02:50浏览次数:10  
标签:物体 dilate 前景 OpenCV 图像 膨胀 cv

目录



cv::dilate() 是 OpenCV 中用于图像形态学变换的函数之一,与 cv::erode() 相对,它执行图像的膨胀操作。膨胀是一种将图像中的前景(白色区域)扩展的操作,通常用于填补图像中的小孔洞、连接分离的物体、或增强图像中的亮区域。



1. 函数定义

void cv::dilate(
    InputArray src, 
    OutputArray dst, 
    InputArray kernel, 
    Point anchor = Point(-1,-1), 
    int iterations = 1, 
    int borderType = BORDER_CONSTANT, 
    const Scalar& borderValue = morphologyDefaultBorderValue() 
);

参数:

  1. srcInputArray 类型,表示输入的源图像。图像通常为单通道的二值图像或灰度图像。

  2. dstOutputArray 类型,表示输出的目标图像。目标图像的尺寸和类型与源图像相同。

  3. kernelInputArray 类型,表示膨胀操作的结构元素(也叫做卷积核)。这个结构元素决定了图像膨胀的方式。可以通过 cv::getStructuringElement() 生成结构元素。常见的核包括:

    • 矩形(MORPH_RECT
    • 椭圆形(MORPH_ELLIPSE
    • 十字形(MORPH_CROSS
  4. anchorPoint 类型,表示膨胀操作的锚点(即核的中心点)。默认值为 Point(-1, -1),表示锚点位于核的中心。

  5. iterationsint 类型,表示膨胀操作的重复次数。默认值是 1,如果需要更强的膨胀效果,可以增大此值。

  6. borderTypeint 类型,指定边界的处理方式。常见的边界类型包括:

    • BORDER_CONSTANT:使用常数值填充边界。
    • BORDER_REPLICATE:重复最外边缘的像素。
    • BORDER_REFLECT:边界以镜像的方式反射。
  7. borderValueScalar 类型,仅当 borderTypeBORDER_CONSTANT 时使用,指定填充边界的值。



2. 工作原理

膨胀:将卷积核在图像上滑动,滑动到每个位置时,计算卷积核覆盖区域的最大值,并将最大值赋给目标图像中相应的位置。这样,图像中的白色区域(前景)会扩展,而黑色区域(背景)会缩小。

假设有一个 3x3 的卷积核:

1 1 1
1 1 1
1 1 1

在膨胀过程中,核覆盖区域中的最大像素值将被赋给输出图像的相应像素位置。如果核覆盖到的是前景(白色像素),那么膨胀后,核覆盖的所有像素都会变为前景像素,从而扩展了前景。



3. 示例

下面是一个使用 cv::dilate() 的 C++ 示例代码:

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    // 读取灰度图像
    Mat src = imread("image.jpg", IMREAD_GRAYSCALE);
    Mat dst;

    // 创建一个 3x3 的矩形结构元素
    Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));

    // 执行膨胀操作
    dilate(src, dst, kernel);

    // 显示原图和膨胀后的图像
    imshow("Original Image", src);
    imshow("Dilated Image", dst);
    waitKey(0);
    return 0;
}

在这段代码中,我们使用 getStructuringElement() 创建了一个 3x3 的矩形卷积核。然后调用 dilate() 函数对图像执行膨胀操作。膨胀后的图像中,白色区域会扩大,小的黑色区域可能会被填充。



4. 应用场景

  1. 填补小孔洞:膨胀可以填充图像中的小孔洞或缝隙,使物体的边界更加完整。例如,在二值化的图像中,有些前景物体可能有小的黑色噪声点,膨胀可以帮助填补这些区域。

  2. 增强前景:在某些应用中,前景物体需要增强或扩展,以便后续处理更加准确。

  3. 连接物体:如果图像中某些前景物体断开或有裂隙,通过膨胀可以使它们连接起来。例如,在处理文本图像时,膨胀可以用于连接断开的字母。

  4. 形态学梯度:膨胀通常与腐蚀操作结合使用,用于计算图像的形态学梯度,以检测物体的边缘。



5. 膨胀和腐蚀的对比

  • 膨胀 (cv::dilate()) 增大前景区域(白色区域),使物体扩展。
  • 腐蚀 (cv::erode()) 缩小前景区域,使物体变小。

通常,膨胀和腐蚀操作是配合使用的。例如,先腐蚀后膨胀可以去除图像中的小噪声,但保留物体的大体形状。这种结合使用的技术称为开运算cv::morphologyEx() 中的 MORPH_OPEN),反之即先膨胀再腐蚀的称为闭运算MORPH_CLOSE),用于填充前景中的小孔洞。



总结

cv::dilate() 是图像处理中的一种基本形态学操作,用于扩展图像的前景部分。通过调整卷积核的大小和形状,可以控制膨胀的程度和方向。它常用于增强图像中的前景物体,填补细小的黑色区域,或连接分散的前景对象。膨胀与腐蚀常结合使用,以进行更复杂的图像处理任务。



标签:物体,dilate,前景,OpenCV,图像,膨胀,cv
From: https://www.cnblogs.com/keye/p/18413771

相关文章

  • OpenSSH 远程代码执行漏洞(CVE-2024-6387) Ubuntu22.04 和 centos7处理方法
    这是文档,不是脚本,请一行一行复制粘贴执行,不用批量自动执行下面是Ubuntu22.04和centos7的处理方法,其他系统可能需要适当调整#!/bin/bash#========================================================================================##Ubuntu22.04升级openssh#......
  • OpenCV(cv::erode())
    目录1.函数定义2.工作原理3.示例4.应用场景总结cv::erode()是OpenCV中的图像形态学变换函数之一,用于执行图像的腐蚀操作。腐蚀是一种将图像中的白色区域缩小的操作,通常用于去除噪声、分离相邻的物体,或将小的图像细节消除。1.函数定义voidcv::erode(InputArraysrc......
  • OpenCV(cv::GaussianBlur())
    目录1.函数定义2.高斯模糊原理2.1高斯核\((3\times3)\)2.1.1高斯核的创建2.1.2卷积操作2.1.3边界处理2.1.4完成模糊处理2.1.5总结2.2高斯核\((5\times5)\)3.示例4.高斯核的生成5.高斯模糊的应用场景6.高斯模糊与其他模糊方式的对比7.总结cv::GaussianBlur()......
  • opencv-python学习笔记9-图像分割
    目录一、图像分割的概述、技术现状、应用:技术现状:传统图像分割技术:深度学习驱动的图像分割技术:应用领域:二、 图像分割的方法和分类:(1)基于阈值的分割方法:(2)基于区域的分割方法:(3)基于边缘的分割方法:(4)基于特定理论的分割方法:(5)基于深度学习的分割方法:三、图像分割的原理:......
  • CVE-2015-5254(ActiveMQ-反序列化漏洞)
    漏洞描述编号:CVE-2015-5254影响版本:ApacheActiveMQ5.13.0之前5.x版本CVE地址:CVE-2015-5254漏洞原理:该漏洞源于程序没有限制可在代理中序列化的对象。远程攻击者可借助特制的序列化的JavaMessageService(JMS)ObjectMessage对象利用该漏洞执行任意代码复现环境windows,doc......
  • VU9P加速卡设计原理图 :410-基于XCVU9P+ C6678的100G光纤的加速卡
    基于XCVU9P+C6678的100G光纤的加速卡一、板卡概述     二、技术指标 •  板卡为自定义结构,板卡大小332mmx260mm; •  FPGA采用Xilinx Virtex UltralSCALE+ 系列芯片 XCVU9P; •  FPGA挂载4组FMC HPC 连接器; •  板载4路QS......
  • 视频监控平台是如何运作的?EasyCVR视频汇聚平台的高效策略与实践
    随着科技的飞速发展,视频监控平台在社会安全、企业管理、智慧城市构建等领域发挥着越来越重要的作用。一个高效的视频监控平台,不仅依赖于先进的硬件设备,更离不开强大的视频处理技术作为支撑。这些平台集成了多种先进的视频技术,以确保实时监控、智能分析、高效传输和存储。今天我们......
  • 解码未来:H.265与H.266技术对比及EasyCVR视频汇聚平台编码技术优势
    随着视频技术的不断发展,视频编码标准也在不断更新迭代。H.265(也称为HEVC,HighEfficiencyVideoCoding)和H.266(也称为VVC,VersatileVideoCoding)作为当前和未来的主流视频编码标准,各自在提升视频压缩效率、画质以及支持新视频类型方面展现出了显著的优势。本文将深入探讨H.265与H.2......
  • opencv实战项目二十三:基于BEBLID描述符的特征点匹配实现表盘校正
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、特征点匹配介绍二、特征点检测三、特征描述符计算四,描述符的匹配筛选五,根据匹配结果映射图片六,整体代码:七,效果:前言在数字化时代,图像处理技术的应用日益广泛,其中表盘校正作为一项重要......
  • 为什么H.266未能普及?EasyCVR视频编码技术如何填补市场空白
    H.266,也被称为VersatileVideoCoding(VVC),是近年来由MPEG(MovingPictureExpertsGroup)和ITU(InternationalTelecommunicationUnion)联合开发并发布的新一代国际视频编码标准。该标准于2020年定稿,旨在提高视频压缩效率,特别是在4K和8K超高清视频领域。然而,尽管H.266拥有诸多技术优势......