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

  • 核的大小:选择适当的核大小尤为重要,过大或过小的核可能会导致处理效果不佳。
  • 输入图像类型:通常对二值化图像进行闭运算效果更明显。
  • 迭代次数:可以通过调整迭代次数来进一步增强效果。
相关推荐
Best_Me079 分钟前
FiLo++的框架图介绍
人工智能·算法·机器学习·职场和发展·蓝桥杯
Francek Chen13 分钟前
【现代深度学习技术】现代循环神经网络07:序列到序列学习(seq2seq)
人工智能·pytorch·rnn·深度学习·神经网络·序列
每天都要写算法(努力版)1 小时前
【神经网络与深度学习】深度学习中的生成模型简介
人工智能·深度学习·神经网络·生成模型
进来有惊喜1 小时前
过采样处理
人工智能
shao9185163 小时前
Gradio全解20——Streaming:流式传输的多媒体应用(5)——基于WebRTC的摄像头实时目标检测
人工智能·目标检测·webrtc·yolov10·twilio·yoloe·turn服务器
蹦蹦跳跳真可爱5893 小时前
Python----机器学习(模型评估:准确率、损失函数值、精确度、召回率、F1分数、混淆矩阵、ROC曲线和AUC值、Top-k精度)
人工智能·python·机器学习
江鸟19985 小时前
AI 编程日报 · 2025 年 5 月 04 日|GitHub Copilot Agent 模式发布,Ultralytics 优化训练效率
人工智能·github·copilot
星火撩猿6 小时前
OpenCv实战笔记(1)在win11搭建opencv4.11.1 + qt5.15.2 + vs2019_x64开发环境
笔记·qt·opencv
liaokailin7 小时前
Spring AI 实战:第十一章、Spring AI Agent之知行合一
java·人工智能·spring
Bruce_Liuxiaowei7 小时前
从零开发一个B站视频数据统计Chrome插件
人工智能·visualstudio·html