Opencv:形态学腐蚀、膨胀Python实现
一、内容
膨胀与腐蚀是图像形态学最基础的两个操作,形态学的其它操作都是基于这两个操作基础上得到的,图像形态学是二值图像分析的重要分支学科。在OpenCV中膨胀与腐蚀对应两个相关的API,膨胀可以看成是最大值滤波,即用最大值替换中心像素点;腐蚀可以看出是最小值滤波,即用最小值替换中心像素点。
膨胀的API如下:
void cv::dilate(
InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue()
)
src 输入图像,任意通道的
dst 输出图像,类型与通道数目必须跟输入保持一致
kernel 结构元素
anchor 中心位置锚定
iterations 循环次数
borderType 边缘填充类型
腐蚀的API如下:
void cv::erode(
InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue()
)
src 输入图像,任意通道的
dst 输出图像,类型与通道数目必须跟输入保持一致
kernel 结构元素
anchor 中心位置锚定
iterations 循环次数
borderType 边缘填充类型
二、代码
import cv2 as cv
import numpy as np
# 读取图像
src = cv.imread("D:/vsprojects/images/abc.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)
# 使用13x13结构元素进行膨胀与腐蚀操作
se = np.ones((13, 13), 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.imwrite("D:/dilate.png", dilate)
cv.imwrite("D:/erode.png", erode)
cv.waitKey(0)
cv.destroyAllWindows()