OpenCV:闭运算

目录

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.mzph.cn/news/894300.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    C++中的类与对象(下)

    上一节我们将类与对象中一个比较难的也是一个比较重要的模块学习了,在这节主要是一些细节上的补充。 文章目录 目录 前言 一、初始化列表 初始化列表的性质 初始化列表的总结 二、类型转换 C中的类型转换 三、static成员 static的特点 一般情况下构造函数调用顺序&a…

    Versal - 基础4(VD100+Versal IBERT)

    1. 简介 在之前的一篇博文中,我分享了在 Zynq Ultrascale MPSoC 中使用 IBERT 的方法。 《Vivado - 集成眼图分析仪 Serial I/O IBERT 误码率_vivado ibert-CSDN博客》 本文进一步探讨 Versal 中使用 IBERT 的方法。 2. 硬件平台 芯片:XCVE2302-SF…

    《HelloGitHub》第 106 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、…

    英语语法 第一天

    I’m a student. 我是个学生 我是个新东方的学生 I’m a student of New Oriental School 我爱你 I love you 我在心中爱你 I love you in my heart. 这是一朵花 This is a flower 这是一朵在公园里的花 This is a flower in the park.(修饰部分在修饰词后面) 主干…

    “新月之智”智能战术头盔系统(CITHS)

    新月人物传记:人物传记之新月篇-CSDN博客 相关文章链接(更新): 星际战争模拟系统:新月的编程之道-CSDN博客 新月智能护甲系统CMIA--未来战场的守护者-CSDN博客 目录 一、引言 二、智能头盔控制系统概述 三、系统架…

    猿人学web 19题(js逆向)

    这题直接点击翻页抓包,然后获取seesion ID请求即可 求和代码 import requestssession requests.Session() cookies {sessionid:eao9i00r8pt4xu6uzzx2k01ttqn51yc9} urlhttps://match.yuanrenxue.cn/api/match/19?page sum0 for i in range(1,6):response sess…

    c语言:编译和链接(详解)

    前言 要将编译和链接,就不得不提及编译器是如何运作的,虽然这部分知识是针对于要创造编译器和创作语言的人所需要清楚的,但作为c语言的学习者也需要了解一下,修炼内功,尤其是对于想学习c的人而言。 编译器的运作过程…

    积分和微分的区别

    积分: 积分是由微小量求大量,由微观的数据求得整体的状况。运算是对总量求和。 微分: 微分是由大量求微小量,反应微观的状况,运算是伴随着求导。 峰值检测电路: 上图检测的误差主要来自与二极管的正向导通电压降&am…

    OVS-DPDK

    dpdk介绍及应用 DPDK介绍 DPDK(Data Plane Development Kit)是一组快速处理数据包的开发平台及接口。有intel主导开发,主要基于Linux系统,用于快速数据包处理的函 数库与驱动集合,可以极大提高数据处理性能和吞吐量&…

    亚博microros小车-原生ubuntu支持系列:18 Cartographer建图

    Cartographer简介 Cartographer是Google开源的一个ROS系统支持的2D和3D SLAM(simultaneous localization and mapping)库。基于图优化(多线程后端优化、cere构建的problem优化)的方法建图算法。可以结合来自多个传感器&#xff0…

    安卓(android)实现注册界面【Android移动开发基础案例教程(第2版)黑马程序员】

    一、实验目的(如果代码有错漏,可查看源码) 1.掌握LinearLayout、RelativeLayout、FrameLayout等布局的综合使用。 2.掌握ImageView、TextView、EditText、CheckBox、Button、RadioGroup、RadioButton、ListView、RecyclerView等控件在项目中的…

    爬虫基础(四)线程 和 进程 及相关知识点

    目录 一、线程和进程 (1)进程 (2)线程 (3)区别 二、串行、并发、并行 (1)串行 (2)并行 (3)并发 三、爬虫中的线程和进程 &am…

    自签证书的dockerfile中from命令无法拉取镜像而docker的pull命令能拉取镜像

    问题现象: docker pull images拉取镜像正常 dockerfile中的from命令拉取镜像就会报出证书错误。报错信息如下: [bjxtbwj-kvm-test-jenkins-6-243 ceshi_dockerfile]$ docker build . [] Building 0.4s (3/3) FINISHED …

    计算机网络 IP 网络层 2 (重置版)

    IP的简介: IP 地址是互联网协议地址(Internet Protocol Address)的简称,是分配给连接到互联网的设备的唯一标识符,用于在网络中定位和通信。 IP编制的历史阶段: 1,分类的IP地址: …

    面对企业文件交换难题,镭速跨网文件交换系统是如何解决的?

    在当今这个数字化快速发展的时代,企业越来越依赖于数据交换来维持其业务运作。无论是内部网络之间的沟通还是与外部合作伙伴的数据共享,高效且安全的跨网文件交换都显得尤为重要。然而,在实际操作中,许多企业面临着各种各样的挑战…

    Many Whelps! Handle It! (10 player) Many Whelps! Handle It! (25 player)

    http://db.nfuwow.com/80/?achievement4403 http://db.nfuwow.com/80/?achievement4406 最少扣你50DKP! 第二阶段 当奥妮克希亚升空后,在10秒内引出50只奥妮克希亚雏龙,随后击败奥妮克希亚。 World of Warcraft [CLASSIC][80猎人][Grandel][最少扣你5…

    自制虚拟机(C/C++)(一、分析语法和easyx运用,完整虚拟机实现)

    网上对虚拟机的解释很多,其实本质就一句话 虚拟机就是机器语言解释器 我们今天要实现汇编语言解释器,下一次再加上ndisasm反汇编器就是真正虚拟机了 注:这里的虚拟机指的是VMware一类的,而不是JVM,python一样的高级语言解释器 …

    36. printf

    1. printf 格式化函数说的是 printf、 sprintf 和 scanf 这样的函数,分为格式化输入和格式化输出两类函数。学习 C 语言的时候常常通过 printf 函数在屏幕上显示字符串,通过 scanf 函数从键盘获取输入。这样就有了输入和输出了,实现了最基本…

    实验八 JSP访问数据库

    实验八 JSP访问数据库 目的: 1、熟悉JDBC的数据库访问模式。 2、掌握使用My SQL数据库的使用 实验要求: 1、通过JDBC访问mysql数据,实现增删改查功能的实现 2、要求提交实验报告,将代码和实验结果页面截图放入报告中 实验过程&a…

    python学opencv|读取图像(四十六)使用cv2.bitwise_or()函数实现图像按位或运算

    【0】基础定义 按位与运算:全1取1,其余取0。按位或运算:全0取0,其余取1。 【1】引言 前序学习进程中,已经对图像按位与计算进行了详细探究,相关文章链接如下: python学opencv|读取图像&…