OpenCV学习膨胀与腐蚀

本文详细介绍了OpenCV中的两种基本形态学操作——膨胀与腐蚀,包括它们的功能、工作原理、API使用以及动态调整结构元素大小的方法。通过实例代码和效果图,帮助读者深入理解如何利用这些操作消除噪声、分割图像元素以及找到图像中的极大值区域。
摘要由CSDN通过智能技术生成

形态学操作

  • 图像形态学操作-基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学
  • 形态学有四个基本操作:腐蚀(erode)、膨胀(dilate) 、开(open)、闭(close)
  • 膨胀与腐蚀是图像处理中最常用的形态学操作手段

一、膨胀与腐蚀的功能

  • 消除噪声

  • 分割(isolate)出独立的图像元素,在图像中连接(join)相邻的元素。

  • 寻找图像中的明显的极大值区域或极小值区域

  • 求出图像的梯度

腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分。膨胀就是图像中的高亮部分进行膨胀,“领域扩张”,效果图拥有比原图更大的高亮区域。腐蚀就是原图中的高亮部分被腐蚀,“领域被蚕食”,效果图拥有比原图更小的高亮区域。

二、膨胀

跟卷积操作类似,假设有图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是任意形状

void dilate( src,dst,kernel );

三、侵蚀

void erode( src, dst, kernel );

腐蚀跟膨胀操作的过程类似,唯一不同的是以最小值替换锚点重叠下图像的像素值。

四、API

getStructuringElement(int shape, Size ksize, Point anchor)
用于获取结构元素
内含三个参数

  • 形状(MORPH_RECT \MORPH_CROSS \MORPH_ELLIPSE)
    矩形 MORPH_RECT;
    交叉形 MORPH_CROSS;
    椭圆形 MORPH_ELLIPSE
  • 内核的尺寸
  • 锚点的位置,默认是Point(-1,-1)意思就是中心像素

我们一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。
kernel: 腐蚀操作的内核,即结构元素。 如果不指定,默认为一个简单的 3x3 矩阵。否则,我们就要明确指定它的形状,可以使用函数getStructuringElement
getStructuringElement函数相关的调用示例代码如下:

 int g_nStructElementSize = 3; //结构元素(内核矩阵)的尺寸
 
//获取自定义核
Mat element = getStructuringElement(MORPH_RECT,
	Size(2*g_nStructElementSize+1,2*g_nStructElementSize+1),
	Point( g_nStructElementSize, g_nStructElementSize ));

调用这样之后,我们便可以在接下来调用erode或dilate函数时,第三个参数填保存了getStructuringElement返回值的Mat类型变量。对应于我们上面的示例,就是填element变量。

五、动态调整结构元素大小

createTrackbar();
在这里插入图片描述

相关
计算机视觉(二)-opencv之createTrackbar()详解

六、代码

 
//-----------------------------------【程序说明】----------------------------------------------
//            程序名称::《【OpenCV入门教程之十】形态学图像处理(一):膨胀与腐蚀  》 博文配套源码
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值