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

  • 核的大小:选择适当的核大小尤为重要,过大或过小的核可能会导致处理效果不佳。
  • 输入图像类型:通常对二值化图像进行闭运算效果更明显。
  • 迭代次数:可以通过调整迭代次数来进一步增强效果。
相关推荐
YuhsiHu42 分钟前
【论文简读】LongSplat
人工智能·深度学习·计算机视觉·3d
2zcode43 分钟前
基于Matlab图像处理的液晶显示器表面缺陷检测与分类研究
人工智能·计算机视觉
白杨SEO营销1 小时前
白杨SEO:百度搜索开放平台发布AI计划是什么?MCP网站红利来了?顺带说说其它
人工智能·百度
有Li1 小时前
探索医学领域多模态人工智能的发展图景:技术挑战与临床应用的范围综述|文献速递-医学影像算法文献分享
论文阅读·人工智能·医学生
陈大鱼头1 小时前
PromptPilot — AI 自动化任务的下一个环节
人工智能
若天明2 小时前
深度学习-卷积神经网络CNN-卷积层
人工智能·深度学习·cnn
小关会打代码2 小时前
机器学习第三课之逻辑回归(二)LogisticRegression
人工智能·机器学习·逻辑回归
清朝牢弟2 小时前
Ubuntu系统VScode实现opencv(c++)图像像素类型转换和归一化
c++·opencv·ubuntu
天天找自己3 小时前
机器学习基石:深入解析线性回归
人工智能·机器学习·线性回归