【python-opencv函数】形态学处理:腐蚀、膨胀、开运算、闭运算

OpenCV形态学处理

opencv的形态学处理主要包括:腐蚀、膨胀、开运算、闭运算等函数,还有其他的形态学处理函数,但平时任务用的不多。

形态学处理的图像为二值图像,主要是针对图像像素“1”在做处理。

1. 腐蚀操作: cv2.erode()

腐蚀是最基本的形态学操作之一,它能够将图像的边界点消除,使图像沿着边界向内收缩,也可以将小于指定结构体元素的部分去除。腐蚀主要用来“收缩”或者“细化”二值图像中的前景,借此实现去噪声,元素分割等功能。
在腐蚀的过程中,是将二值图中亮度高的部分也就是白色的部分向内腐蚀。类似之前学到的图像滤波处理(卷积滤波),形态学处理也需要一个卷积核来表示腐蚀或者膨胀的大小。

卷积核kernel又叫“结构元”,既可以用cv2.getStructuringElement()函数生成,也可以用numpy生成,卷积核越大,形态学处理的面积也就越大,处理的强度也越大。

示例代码如下:

先导入图像

import cv2

img  = cv2.imread('./1.png')

原图像

然后我们使用腐蚀函数cv2.erode()对原图像进行腐蚀操作:
先定义核函数kernel

kernel = np.ones((5,5)) #矩形核,元素值为1

再使用腐蚀操作:

res = cv2.erode(img, kernel=kernel, iterations=None)

在这里插入图片描述

cv2.erode()函数常用的参数有3个, img为输入的图像,kernel为定义的卷积核, iterations是迭代的次数,次数越高,腐蚀的越厉害。

2. 膨胀操作: cv2.dilate()

膨胀操作和腐蚀操作作用相反,也可以说是腐蚀的逆操作,具体的用法和腐蚀函数erode()一样,同样需要一个kernel代表膨胀的大小,也可以设置iterations参数的数值。

使用膨胀操作的示例代码:

res_dilation = cv2.dilate(img, kernel, iterations=None)

在这里插入图片描述

3. 开、闭运算cv2.morphologyEx()

我们可以看到,单纯的腐蚀和膨胀操作会使得图像在原有的形状的基础上发生改变。为了在不改变图像的基础上,而又完成一系列的功能,则需要结合这两种操作。通俗地讲,开闭运算可以节省腐蚀和膨胀的两步操作。

开运算:先腐蚀后膨胀,用来去除图像中一些小的噪点;
闭运算:先膨胀后腐蚀,用来连接被误分为许多小块的图像(例如轮廓的边缘没有连接)

示例代码:

开运算:先读取一张带有盐噪声的图像

img = cv2.imread('./2.png')

在这里插入图片描述
然后在对其进行开运算

res_open = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

在这里插入图片描述
cv2.morphologyEx()函数共有3个常用参数,img为输入的图像,cv2.MORPH_OPEN证明此时是开运算,kernel代表开运算同样需要一个核来对原图像处理。

4. 闭运算

闭运算和开运算使用同样的函数,只不过是把参数cv2.MORPH_OPEN改成cv2.MORPH_CLOSE即可。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值