OpenCV:闭运算

embedded/2025/2/3 19:31:00/

目录

1. 简述

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

2.1 代码示例

2.2 运行结果

3. 闭运算接口

3.1 参数详解

3.2 代码示例

3.3 运行结果

4. 闭运算的应用场景

5. 注意事项


相关阅读

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

OpenCV:开运算-CSDN博客


1. 简述

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

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

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

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

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

数学表达式为:

A \bullet B = \left ( A \oplus B \right ) \ominus B

其中:

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

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

2.1 代码示例

import cv2
import numpy as npimage = 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() 实现,其关键参数如下:

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个:

    cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)

    3.2 代码示例

    import cv2
    import numpy as npimage = 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. 注意事项

    • 核的大小:选择适当的核大小尤为重要,过大或过小的核可能会导致处理效果不佳。
    • 输入图像类型:通常对二值化图像进行闭运算效果更明显。
    • 迭代次数:可以通过调整迭代次数来进一步增强效果。

    http://www.ppmy.cn/embedded/159251.html

    相关文章

    基于PyQt5打造的实用工具——PDF文件加图片水印,可调大小位置,可批量处理!

    01 项目简介 (1)项目背景 随着PDF文件在信息交流中的广泛应用,用户对图片水印的添加提出了更高要求,既要美观,又需高效处理批量文件。现有工具难以实现精确调整和快速批量操作,操作繁琐且效果不理想。本项…

    机器人介绍

    以下是关于机器人的介绍: 定义 机器人是一种能够自动执行任务的机器系统,它集成了机电、机构学、材料学及仿生学等多个学科技术,可以接受人类指挥,运行预先编排的程序,或根据人工智能技术制定的原则纲领行动&#xf…

    JAVA 接口、抽象类的关系和用处 详细解析

    接口 - Java教程 - 廖雪峰的官方网站 一个 抽象类 如果实现了一个接口,可以只选择实现接口中的 部分方法(所有的方法都要有,可以一部分已经写具体,另一部分继续保留抽象),原因在于: 抽象类本身…

    第21节课:前端构建工具—自动化与模块化的利器

    目录 前端构建工具的重要性任务运行器:Gulp与GruntGulpGulp的工作原理安装与使用Gulp GruntGrunt的工作原理安装与使用Grunt 模块打包器:WebpackWebpack简介Webpack的工作原理安装与使用Webpack 实践:使用Gulp和Webpack构建前端项目示例&…

    TensorFlow 示例摄氏度到华氏度的转换(二)

    这是一个完整的神经网络实现,用于将摄氏度转换为华氏度。下面,我会逐步描述各个步骤,并提供完整代码。 1. 数据准备与预处理 在这部分,我们准备了摄氏度(features)与对应的华氏度(labels&…

    32. C 语言 安全函数( _s 尾缀)

    本章目录 前言什么是安全函数?安全函数的特点主要的安全函数1. 字符串操作安全函数2. 格式化输出安全函数3. 内存操作安全函数4. 其他常用安全函数 安全函数实例示例 1:strcpy_s 和 strcat_s示例 2:memcpy_s示例 3:strtok_s 总结 …

    【论文阅读笔记】“万字”关于深度学习的图像和视频阴影检测、去除和生成的综述笔记 | 2024.9.3

    论文“Unveiling Deep Shadows: A Survey on Image and Video Shadow Detection, Removal, and Generation in the Era of Deep Learning”内容包含第1节简介、第2-5节分别对阴影检测、实例阴影检测、阴影去除和阴影生成进行了全面的综述。第6节深入讨论了阴影分析&#xff0…

    每日 Java 面试题分享【第 16 天】

    欢迎来到每日 Java 面试题分享栏目! 订阅专栏,不错过每一天的练习 今日分享 3 道面试题目! 评论区复述一遍印象更深刻噢~ 目录 问题一:Java 运行时异常和编译时异常之间的区别是什么?问题二:什么是 Jav…