腐蚀操作类似于将图像进行缩边
腐蚀操作也是用卷积核扫描图像, 只不过腐蚀操作的卷积和一般都是1, 如果卷积核内所有像素点都是白色, 那么锚点即为白色.
大部分时候腐蚀操作使用的都是全为1的卷积核.
erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
#读取图片
img= cv2.imread('./code/j2.png')
#定义腐蚀操作 卷积核
kernel=np.ones((5,5),np.uint8)
#进行腐蚀操作
dst=cv2.erode(img,kernel,iterations=1)
cv2.imshow('img',np.hstack((img,dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()
上面的腐蚀操作中,我们自行创建了一个5*5 的全1卷积核,但是遇到复杂的图像操作时,我们不可能每次都自行指定卷积核,因此opencv提供了获取卷积核的api.不需要我们手工创建卷积核.
#读取图片
import numpy as np
import cv2
img= cv2.imread('./j2.png')
#自动获取卷积核
kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
kerne2=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
kerne3=cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))
#进行腐蚀操作
dst=cv2.erode(img,kernel,iterations=1)
dst2=cv2.erode(img,kerne2,iterations=1)
dst3=cv2.erode(img,kerne3,iterations=1)
cv2.imshow('img',np.hstack((img,dst,dst2,dst3)))
cv2.waitKey(0)
cv2.destroyAllWindows()
图片中卷积核的顺序依次为 原图,MORPH_RECT(矩形卷积核),MORPH_ELLIPSE(椭圆卷积核),MORPH_CROSS(十字卷积核)
膨胀操作类似对图像进行扩边
膨胀是腐蚀的相反操作, 基本原理是只要保证卷积核的锚点是非0值, 周边无论是0还是非0值, 都变成非0值.
import cv2
import numpy as np
img = cv2.imread('./j.png')
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
dst = cv2.dilate(img, kernel, iterations=2)
cv2.imshow('img', np.hstack((img, dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()
#读取图片
img= cv2.imread('./j.png')
#自动获取卷积核
kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
# 进行腐蚀操作
dst1=cv2.erode(img,kernel,iterations=1)
#进行膨胀操作
dst2=cv2.dilate(img,kernel,iterations=1)
cv2.imshow('img',np.hstack((img,dst1,dst2)))
cv2.waitKey(0)
cv2.destroyAllWindows()