一、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他才为零。
如果有理解不到位的地方,希望大家指正。ε≡٩(๑>₃<)۶ 一心向学!