OpenCV:闭运算

目录

[1. 简述](#1. 简述)

[2. 用膨胀和腐蚀实现闭运算](#2. 用膨胀和腐蚀实现闭运算)

[2.1 代码示例](#2.1 代码示例)

[2.2 运行结果](#2.2 运行结果)

[3. 闭运算接口](#3. 闭运算接口)

[3.1 参数详解](#3.1 参数详解)

[3.2 代码示例](#3.2 代码示例)

[3.3 运行结果](#3.3 运行结果)

[4. 闭运算的应用场景](#4. 闭运算的应用场景)

[5. 注意事项](#5. 注意事项)


相关阅读

OpenCV:图像的腐蚀与膨胀-CSDN博客

OpenCV:开运算-CSDN博客


1. 简述

简而言之:闭运算 = 膨胀 + 腐蚀

闭运算 是一种形态学操作,用于填补前景物体中的小孔洞、连接断裂部分以及平滑前景边缘。

它的操作顺序是:

  1. 膨胀:先扩展前景物体,使前景变大。
  2. 腐蚀:再缩小前景物体,恢复形状。

闭运算的作用可以概括为:

  • 填补前景中的小空隙。
  • 连接相近的前景区域。
  • 平滑边界。

数学表达式为:

其中:

  • A 是输入图像。
  • B 是卷积核。
  • ⊕ 表示膨胀操作。
  • ⊖ 表示腐蚀操作。

2. 用膨胀和腐蚀实现闭运算

2.1 代码示例

python 复制代码
import cv2
import numpy as np

image = cv2.imread('D:\\resource\\filter\\q4.jpg')

# 卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))

# 膨胀操作
result1 = cv2.dilate(image, kernel, iterations=1)

# 腐蚀操作
result2 = cv2.erode(result1, kernel, iterations=1)

# 显示原始图像、闭运算(膨胀 + 腐蚀)图像
cv2.imshow('image', image)
cv2.imshow('result2', result2)

cv2.waitKey(0)
cv2.destroyAllWindows()

2.2 运行结果

从左到右:

  • 原始黑底白字图像,白字内部带一些黑色的噪点。
  • 图像进行膨胀、腐蚀之后的结果,内部黑色噪点消失。

3. 闭运算接口

在 OpenCV 中,闭运算由函数 cv2.morphologyEx() 实现,其关键参数如下:

python 复制代码
cv2.morphologyEx(src, op, kernel, dst=None, anchor=(-1, -1), iterations=1, borderType=cv2.BORDER_CONSTANT, borderValue=0)

3.1 参数详解

  • src:输入图像。通常是二值化图像或灰度图像。
  • op:操作类型,闭运算的标识符为 cv2.MORPH_CLOSE。
  • kernel:结构元素(卷积核),决定形态学操作的范围和形状。
  • dst:输出图像。默认为 None。
  • anchor:结构元素的锚点,默认为 (-1, -1),即以核的中心为锚点。
  • iterations:操作的迭代次数,默认为 1。
  • borderType:边界模式,定义图像边界的填充方式,常用 cv2.BORDER_CONSTANT。
  • borderValue:边界值,仅在 borderType 为 cv2.BORDER_CONSTANT 时使用。

常用的参数为前3个:

python 复制代码
cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)

3.2 代码示例

python 复制代码
import cv2
import numpy as np

image = cv2.imread('D:\\resource\\filter\\q4.jpg')

# 卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))

# 膨胀操作
#result1 = cv2.dilate(image, kernel, iterations=1)

# 腐蚀操作
#result2 = cv2.erode(result1, kernel, iterations=1)

# 闭运算
result2 = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)

# 显示原始图像、闭运算(膨胀 + 腐蚀)图像
cv2.imshow('image', image)
cv2.imshow('result2', result2)

cv2.waitKey(0)
cv2.destroyAllWindows()

3.3 运行结果


4. 闭运算的应用场景

  • 填补前景中的小孔洞:闭运算可以有效填补前景区域中的小空洞,从而使目标更加完整。
  • 连接断裂的前景区域:当前景物体存在细小的断裂区域时,闭运算可以将其连接起来。
  • 平滑前景边界:通过闭运算,前景的边界可以变得更加平滑,去除不必要的凹陷。

5. 注意事项

  • 核的大小:选择适当的核大小尤为重要,过大或过小的核可能会导致处理效果不佳。
  • 输入图像类型:通常对二值化图像进行闭运算效果更明显。
  • 迭代次数:可以通过调整迭代次数来进一步增强效果。
相关推荐
Coovally AI模型快速验证19 小时前
2.5GB 塞进浏览器:Mistral 开源实时语音识别,延迟不到半秒
人工智能·5g·计算机视觉·开源·语音识别
AI营销资讯站19 小时前
AI营销内容增长瓶颈?原圈科技以AI Agents破局之道
大数据·人工智能
2501_9458374319 小时前
OpenClaw 核心:开源 AI 执行网关的技术内核
人工智能·开源
代码哈士奇19 小时前
AI时代,思考探索一种新的交互方式
人工智能
i建模19 小时前
开源AI memory项目一览表
人工智能·开源
进击monkey19 小时前
2026 企业知识库首选:PandaWiki AGPL-3.0 开源,无绑定+合规+降本三不误
人工智能·开源·ai知识库
發糞塗牆19 小时前
【Azure 架构师学习笔记 】- Azure AI(21) - Azure Agent进阶优化
人工智能·ai·azure
睿观·ERiC19 小时前
跨境电商 AI Agent 赛道爆发:从开源生态到垂直 Skill 落地,2026 年 3 月核心技术动态盘点
人工智能·开源
AC赳赳老秦19 小时前
OpenClaw 系统监控实战指南:构建高效的电脑/服务器状态监控与自动告警系统
服务器·开发语言·人工智能·php·ai-native·deepseek·openclaw
fof92019 小时前
Base LLM | 从 NLP 到 LLM 的算法全栈教程 第三天
人工智能·自然语言处理