Opencv 学习笔记:图像膨胀 / 腐蚀(附滑块动态调节腐蚀核大小)

形态学操作中的膨胀与腐蚀是图像分割、边缘处理的核心技巧,结合 OpenCV 滑块可动态调整操作核大小,无需反复改代码。本文演示膨胀 / 腐蚀的基础实现,及滑块调节腐蚀核的交互玩法。

核心代码实现

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

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

# 2. 定义全局变量(滑块回调用)
A = 1
erodeds = np.zeros_like(src)

# 3. 腐蚀回调函数:动态调整核大小
def eroded(A):
    # 确保核大小为奇数(形态学操作要求)
    kernel_size = A if A % 2 == 1 else A + 1
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (kernel_size, kernel_size))
    eroded_img = cv.erode(src, kernel)
    global erodeds
    erodeds = eroded_img

# 4. 基础膨胀/腐蚀演示(固定核大小21×21)
kernel = cv.getStructuringElement(cv.MORPH_RECT, (21, 21))
eroded_fixed = cv.erode(src, kernel)    # 固定核腐蚀
dilated = cv.dilate(src, kernel)        # 固定核膨胀
cv.imshow('dilated_image', dilated)     # 显示膨胀结果
cv.waitKey(0)
cv.destroyWindow('dilated_image')

# 5. 滑块动态调节腐蚀核
cv.namedWindow('outimage')
# 创建滑块:名称、绑定窗口、初始值、最大值、回调函数
cv.createTrackbar('erode', 'outimage', 2, 21, eroded)
eroded(A)  # 初始化腐蚀图像

# 6. 循环显示动态调整效果
while True:
    cv.imshow('outimage', erodeds)
    # 按键中断(任意键按下退出)
    if cv.waitKey(50) > 0:
        break

cv.destroyAllWindows()

关键知识点解析

  1. 形态学操作核心

    • 腐蚀(erode):收缩图像高亮区域,可消除小的白色噪点;
    • 膨胀(dilate):扩张图像高亮区域,可填补小的黑色孔洞;
    • 结构元素(kernel):cv.getStructuringElement(MORPH_RECT, (size, size)) 创建矩形核,size 需为奇数
  2. 滑块交互关键

    • 滑块回调函数参数为当前滑块值,自动传递无需手动传参;
    • 全局变量erodeds存储处理后图像,保证循环显示时数据更新;
    • 补充核大小奇偶校验,避免偶数核导致的操作异常。
  3. 原代码优化点

    • 修复滑块初始值为偶数时核大小异常问题;
    • 拆分固定核演示与滑块调节逻辑,避免窗口显示冲突;
    • 补全图像初始化,防止首次显示空值。

总结

  1. 膨胀 / 腐蚀的核心是结构元素(核),核越大操作效果越明显;
  2. 滑块可动态调节核大小,大幅提升形态学操作的调试效率;
  3. 形态学操作核大小必须为奇数,实际使用中需做奇偶校验。
相关推荐
chemddd6 小时前
豆包生成 亚马逊链接的视频
学习·交友
weixin_431600446 小时前
NestJS 入门(7):生命周期钩子——构造函数和 `OnModuleInit` 差在哪?
前端·后端·学习·node.js·nest.js
工业HMI实战笔记7 小时前
解放双手,声控未来:抗噪语音交互如何革新嘈杂车间的HMI操作体验
人工智能·学习·自动化·制造
知识分享小能手7 小时前
线性代数学习教程,从入门到精通,相似矩阵及二次型 — 知识点详解(9)
学习·线性代数·机器学习
小弥儿8 小时前
GitHub今日热榜 | 2026-08-14:OSINT情报工具回流,本地AI赛道升温
人工智能·学习·开源·github
小黄人软件8 小时前
【证书批量转换】PEM->CER证书批量转换工具.exe 纯 Python实现,无需安装OpenSSL
人工智能·学习
demodeom9 小时前
Win11 + RTX 5080 本地 Coding 模型测试笔记(已弃坑)
笔记
peijiping10 小时前
Agent 工具执行:并行(parallel_tool_calls)和后台(run_in_background)到底有什么区别? (学习笔记)
笔记·学习·ai agent·claude code
Oll Correct10 小时前
Adobe illustrator 案例四:吃豆人 (Pac-Man)图标绘制
笔记·ui·adobe·illustrator
何事误红尘10 小时前
KF32A学习笔记(二):IDE基本使用、srec和hex格式、FreeRTOS移植
学习