Opencv 学习笔记:形态学开 / 闭运算(解决噪点与孔洞问题)

形态学开运算和闭运算是腐蚀、膨胀的组合操作,是图像预处理中解决噪点和孔洞问题的核心技巧。本文通过极简代码,演示开 / 闭运算的实现流程,新手可快速掌握其应用场景与使用方法。

核心代码实现

python 复制代码
import cv2 as cv
import numpy as np

# 1. 读取图像并校验
src = cv.imread(".\image\6.bmp")
if src is None:
    print('could not load image')
    exit()
cv.imshow("src", src)

# 2. 转灰度+二值化(形态学操作前的基础预处理)
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 120, 255, cv.THRESH_BINARY)

# 3. 创建结构元素(核):5×3矩形核
kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 3))

# 4. 形态学运算
closed1 = cv.morphologyEx(binary, cv.MORPH_CLOSE, kernel)  # 闭运算:膨胀→腐蚀
opened1 = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel)   # 开运算:腐蚀→膨胀

# 5. 显示结果
cv.imshow('outimage(闭运算)', closed1)
cv.imshow('outimage1(开运算)', opened1)

cv.waitKey(0)
cv.destroyAllWindows()

关键知识点解析

1. 开 / 闭运算本质

运算类型 执行顺序 核心作用 适用场景
开运算 腐蚀 → 膨胀 消除小的白色噪点、分离粘连区域 去除图像中的点状噪声
闭运算 膨胀 → 腐蚀 填补小的黑色孔洞、连接断裂区域 修复目标区域的缝隙 / 孔洞

2. 核心参数说明

  • cv.morphologyEx:形态学运算核心 API,第一个参数为输入图像(需二值化),第二个参数指定运算类型,第三个参数为结构元素;
  • 结构元素(kernel):cv.getStructuringElement(MORPH_RECT, (5,3)) 创建矩形核,尺寸越大运算效果越显著,可根据噪点 / 孔洞大小调整;
  • 二值化前提:形态学开 / 闭运算对二值图效果最佳,需先将灰度图转为二值图。

3. 实操注意事项

  • 核的尺寸:噪点小则用小核(如 3×3),噪点大则用大核(如 7×7),避免过度运算导致目标轮廓变形;
  • 阈值适配:二值化阈值(示例中 120)需根据图像明暗调整,确保目标区域与背景区分清晰;
  • 运算顺序:开 / 闭运算的核心是 "先腐蚀后膨胀" 和 "先膨胀后腐蚀",顺序不可颠倒。

总结

  1. 开运算适合消除白色噪点,闭运算适合填补黑色孔洞,是二值图预处理的高频技巧;
  2. 形态学开 / 闭运算依赖结构元素,核的尺寸需根据图像实际情况调整;
  3. 操作前需将图像转为二值图,才能保证运算效果。
相关推荐
M78佐菲7 小时前
ARM学习笔记(1)
linux·arm开发·笔记·嵌入式硬件·学习
益达丫8 小时前
Socket编程揭秘:端口、IP与进程通信的底层逻辑
linux·笔记
无敌贵点大王10 小时前
RTThread学习记录11——RT-Thread 设备模型吃透:UART/ADC/PWM/PIN 到底有什么区别?
c语言·stm32·学习·链表
是翎11 小时前
深度长文|2026产品经理AI实践手册
人工智能·深度学习·学习·自然语言处理·数据挖掘
Linux-lucky11 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu
知识分享小能手12 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
马可家的菠萝14 小时前
你收藏的资料,有多少真的被你第二次打开过?
笔记·知识管理·效率提升·个人知识库
江畔柳前堤14 小时前
字节跳动·大模型应用知识手册
前端·人工智能·深度学习·opencv·目标检测·重构·transformer
小刘在重生~15 小时前
Java Lock 显式锁案例|ReentrantLock 解决多线程安全问题(超详细实战)
java·笔记·面试
职豚求职小程序15 小时前
中国人寿27秋招笔试[特殊字符]北森机考|备考攻略
笔记