OpenCV 形态学操作
# 图像膨胀(扩大白色区域/边缘)
# 参数1: 输入图像(通常是边缘检测结果)
# 参数2: 结构元素(核矩阵)
# 参数3: iterations: 膨胀操作次数
# 核矩阵选项:
# - 自定义核: cv.getStructuringElement(shape, size)
# - 常用形状:
# cv.MORPH_RECT(矩形),
# cv.MORPH_ELLIPSE(椭圆),
# cv.MORPH_CROSS(十字形)
kernel = cv.getStructuringElement(cv.MORPH_RECT, (7,7))
dilated = cv.dilate(canny, kernel, iterations=3)
cv.imshow('Dilated', dilated)# 图像腐蚀(缩小白色区域/边缘)
# 参数与膨胀相同,但效果相反
# 常与膨胀配合使用(开运算=先腐蚀后膨胀,闭运算=先膨胀后腐蚀)
eroded = cv.erode(dilated, (7,7), iterations=3)
cv.imshow('Eroded', eroded)
膨胀与腐蚀操作参数对比总结
参数/属性 | 膨胀 (cv2.dilate ) | 腐蚀 (cv2.erode ) |
---|---|---|
核心功能 | 扩展图像中的白色区域(前景) | 缩小图像中的白色区域(前景) |
工作原理 | 用核覆盖区域内的最大像素值替换中心像素值 | 用核覆盖区域内的最小像素值替换中心像素值 |
关键参数 | ||
- 输入图像 | 二值图像(如Canny边缘结果) | 同膨胀 |
- 核 (kernel ) | 结构元素(核矩阵),支持形状: • cv2.MORPH_RECT (矩形)• cv2.MORPH_ELLIPSE (椭圆)• cv2.MORPH_CROSS (十字形) | 同膨胀 |
- 迭代次数 (iterations ) | 值越大,白色区域扩展越显著 | 值越大,白色区域缩减越显著 |
核尺寸影响 | 核尺寸越大(如(7,7) ),效果越强但计算量增加 | 同膨胀 |
典型效果 | 填补空洞、连接断裂边缘、增大目标尺寸 | 去除噪点、分离粘连物体、细化边缘 |
组合应用 | 闭运算:先膨胀后腐蚀 → 填充小孔洞 | 开运算:先腐蚀后膨胀 → 去除小噪点 |
形态学梯度 | 梯度 = 膨胀结果 - 腐蚀结果 → 突出目标轮廓 | 同左侧计算逻辑 |