62 图像形态学—膨胀与腐蚀
代码
import cv2 as cv
import numpy as np
src = cv.imread("../images/hist_02.jpg")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)
# 使用3x3结构元素进行膨胀与腐蚀操作
se = np.ones((3, 3), dtype=np.uint8)
dilate = cv.dilate(src, se, None, (-1, -1), 1)
erode = cv.erode(src, se, None, (-1, -1), 1)
# 显示
cv.imshow("dilate", dilate)
cv.imshow("erode", erode)
cv.waitKey(0)
cv.destroyAllWindows()
实验结果
解释
膨胀与腐蚀是图像形态学最基础的两个操作,形态学的其它操作都是基于这两个操作基础上得到的,图像形态学是二值图像分析的重要分支学科。在OpenCV中膨胀与腐蚀对应两个相关的API,膨胀可以看成是最大值滤波,即用最大值替换中心像素点;腐蚀可以看出是最小值滤波,即用最小值替换中心像素点。
膨胀的API如下:
dst = cv.dilate(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
src
输入图像,任意通道的kernel
结构元素dst
输出图像,类型与通道数目必须跟输入保持一致anchor
中心位置锚定iterations
循环次数borderType
边缘填充类型borderValue
边界不变时的边界值
腐蚀的API如下:
dst = cv.erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
src
输入图像,任意通道的kernel
结构元素dst
输出图像,类型与通道数目必须跟输入保持一致anchor
中心位置锚定iterations
循环次数borderType
边缘填充类型borderValue
边界不变时的边界值
所有内容均来源于贾志刚老师的知识星球——OpenCV研习社,本文为个人整理学习,已获得贾老师授权,有兴趣、有能力的可以加入贾老师的知识星球进行深入学习。