2021-11-15 cv2.erode()和cv2.dilate()的原理理解


一、cv2.erode()和cv2.dilate()的运行原理

cv2.erode()是进行腐蚀用的,具体原理就是通过和卷积核进行操作,
以0和1为例 ,如果卷积核范围内有一个不是1,那么这点就为0,全是1的话这个点才为1。
而且他进行活动后的这个像素并不会影响下一个像素的改变,就是说这个值原本是0,经过操作后变为了1,但是相邻像素进行判断时还是把它当0。

示例代码如下:
import numpy as np
import matplotlib.pyplot as plt
import cv2
a=[[1,1,0,0,0,0,0],[1,0,0,1,0,0,0],[0,0,0,1,0,0,0],[0,0,0,1,0,0,0],[0,0,0,1,0,0,0],[0,0,0,1,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]]
#a[i][j]   i 是y j是x
a=np.array(a,np.uint8)
print(a.shape)#(8,7)
kernel = kernelY = cv2.getStructuringElement(cv2.MORPH_RECT, (1,3))#[[1][1][1]]
print(kernel)
print(kernel.shape)
plt.subplot(121)
plt.imshow(a)
plt.grid()

plt.subplot(122)
a_erode=cv2.erode(a,kernel,iterations=1)
plt.imshow(a_erode)
plt.grid()

plt.show()

在这里插入图片描述
这个图左边是原始图像,右边是处理后的图像,可以看出他是根据像素上下两点进行判断。注意kernel = kernelY = cv2.getStructuringElement(cv2.MORPH_RECT, (1,3))#[[1][1][1]]这里的(1,3)是三行一列,不是一行三列,我也不太清楚是怎么回事o(╥﹏╥)o。
a_erode=cv2.erode(a,kernel,iterations=1)的iterations可以立即为运行几次,即在这个卷积核的基础下收缩几次。

cv2.dilate()原理也大致相同,只不过规则是卷积核范围内只要有一个点是一这个点就是1,全是0他才为零。

如果有理解不到位的地方,希望大家指正。ε≡٩(๑>₃<)۶ 一心向学!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值