腐蚀是元素全为1的卷积核
方法:
erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
import cv2 import numpy as np img = cv2.imread('./msb.png') kernel = np.ones((3, 3), np.uint8) dst = cv2.erode(img, kernel, iterations=2) cv2.imshow('img', np.hstack(img, dst)) cv2.waitKey(0) cv2.destroyAllWindows()
dilate(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
# 使用cv2提供的函数获取形态学卷积核:MORPH_RECT,CROSS,ELLIPSE等 kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5)) # 膨胀卷积核选择类型 # 膨胀操作 dst = cv2.dilate(img, kernel) cv2.imshow('img', np.hstack(img, dst))
cv提供了获取卷积核的API,不需要我们手动创建卷积核
getStructuringElement(shape, ksize[, anchor])
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5)) # 在使用腐蚀或膨胀的时候,作为卷积核使用 cv2.erode(img, kernel, iterations=2)
morphologyEx(img, cv2.MORPH_OPEN, kernel)
morphologyEx(img, cv2.MORPH_CLOSE, kernel)
morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
# 注意调节kernel大小以获得更清晰的边缘 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) dst = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel, iterations=1)
morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)