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. 注意事项

  • 核的大小:选择适当的核大小尤为重要,过大或过小的核可能会导致处理效果不佳。
  • 输入图像类型:通常对二值化图像进行闭运算效果更明显。
  • 迭代次数:可以通过调整迭代次数来进一步增强效果。
相关推荐
不写bug的程序媛2 分钟前
n8n用veo3生成视频一直报错获取不到图片链接问题
人工智能
一山秋叶2 分钟前
带分数正则的一致性蒸馏
人工智能·深度学习
一枕眠秋雨>o<3 分钟前
算子即战略:CANN ops-nn 如何重构大模型推理的内存与计算边界
人工智能·重构
hg01186 分钟前
威海挖掘机开年斩获2亿元非洲订单
人工智能
lusasky6 分钟前
海事监管数据挖掘技术栈
人工智能·数据挖掘
忆~遂愿6 分钟前
Runtime 上下文管理:计算实例的生命周期、延迟最小化与上下文切换优化
java·大数据·开发语言·人工智能·docker
Aspect of twilight7 分钟前
Mind-Cube介绍
人工智能·深度学习
AI资源库8 分钟前
Qwen3-Coder-Next模型深入解析
人工智能·语言模型
Elastic 中国社区官方博客8 分钟前
使用 Groq 与 Elasticsearch 进行智能查询
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
一战成名9969 分钟前
深度解析 CANN 模型转换工具链:从 ONNX 到 OM
人工智能·学习·安全·开源