计算机视觉中的开运算(Opening)和闭运算(Closing)是两种非常重要的形态学(Morphological)图像处理操作。它们主要用于图像的去噪、分割、特征提取等任务。这两种运算都基于两种更基础的操作:腐蚀(Erosion)和膨胀(Dilation)。

腐蚀(Erosion)与膨胀(Dilation)

要理解开运算和闭运算,首先需要了解腐蚀和膨胀。在这些操作中,我们使用一个被称为结构元素(Structuring Element)的核(kernel)来扫描图像。结构元素是一个小型的、通常是二值的矩阵,它可以有不同的形状,如正方形、圆形、菱形等。

腐蚀(Erosion)

腐蚀就像它的名字一样,会“侵蚀”图像中的前景物体(白色像素)。它的原理是:将结构元素在图像上滑动,如果结构元素能完全包含在前景像素区域内,那么结构元素中心位置的像素值保持不变(仍为白色);否则,该像素值变为背景(黑色)。

核心作用:

  • 收缩前景物体,使细小的物体消失。
  • 断开前景物体之间的细小连接。
  • 去除图像中的小噪点。

可参考:https://blog.csdn.net/www_dong/article/details/151157623

膨胀(Dilation)

膨胀与腐蚀相反,它会“扩张”前景物体。它的原理是:将结构元素在图像上滑动,如果结构元素与前景像素有任何重叠,那么结构元素中心位置的像素值就变为前景(白色)。

核心作用:

  • 扩张前景物体,使物体的轮廓变粗。
  • 连接前景物体之间断开的区域。
  • 填充物体内部的小孔洞。

可参考:https://blog.csdn.net/www_dong/article/details/151157814

开运算(Opening)与闭运算(Closing)

开运算和闭运算是腐蚀和膨胀的组合应用,它们通过特定的顺序来达到更复杂、更精细的图像处理效果。

开运算(Opening)

定义: 先进行腐蚀,再进行膨胀

开运算(A,B)=(腐蚀(A,B)) 膨胀(B)

其中 A 是原始图像,B 是结构元素。

作用与原理:

  1. 第一步(腐蚀): 腐蚀操作会移除图像中所有小于结构元素的孤立噪点和细小连接,同时也会使前景物体收缩。
  2. 第二步(膨胀): 膨胀操作会恢复腐蚀后前景物体的大小。由于腐蚀已经去除了小噪点,膨胀无法将它们恢复,但会恢复那些较大的、有意义的前景物体。

效果: 开运算的主要作用是去除小的、孤立的噪点,同时平滑物体轮廓。它能有效地将物体从背景中分离出来,特别是当物体被细小的噪点或毛刺污染时。可以形象地理解为,开运算就像一个筛子,把小于“筛孔”(结构元素)的碎屑(噪点)筛掉,而保留了大的颗粒(物体)。

闭运算(Closing)

定义: 先进行膨胀,再进行腐蚀

闭运算(A,B)=(膨胀(A,B)) 腐蚀(B)

其中 A 是原始图像,B 是结构元素。

作用与原理:

  1. 第一步(膨胀): 膨胀操作会填充前景物体内部的小孔洞或裂缝,并连接断开的物体。
  2. 第二步(腐蚀): 腐蚀操作会恢复膨胀后物体的大小和轮廓,但由于膨胀已经填充了孔洞,腐蚀无法将它们重新打开,只会使物体轮廓恢复到接近原始状态。

效果: 闭运算的主要作用是填充物体内部的小孔洞或裂缝,同时连接断开的物体。它能够弥合前景物体中的不连续性,使物体轮廓变得平滑。可以形象地理解为,闭运算就像是给物体“打补丁”,把小的破洞和裂缝都修补起来。

opencv实现开运算与闭运算

核心函数

cv2.morphologyEx()

用于执行高级形态学转换。

cv2.morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=1, borderType=None, borderValue=None)

参数解释:

  • src: 原始输入图像(通常是二值图像)。
  • op: 要执行的形态学操作类型。对于开运算和闭运算,我们使用:
    • cv2.MORPH_OPEN:执行开运算。
    • cv2.MORPH_CLOSE:执行闭运算。
  • kernel: 用于操作的结构元素(Structuring Element)。你可以使用 cv2.getStructuringElement() 函数来创建它。
  • iterations: 操作重复的次数,默认为1。增加这个值可以增强效果。

cv2.getStructuringElement()

在执行形态学操作之前,需要定义一个结构元素。cv2.getStructuringElement() 函数可以创建不同形状和大小的结构元素。

cv2.getStructuringElement(shape, ksize, anchor=None)

参数解释:

  • shape: 结构元素的形状。常用的形状有:
    • cv2.MORPH_RECT: 矩形
    • cv2.MORPH_ELLIPSE: 椭圆形
    • cv2.MORPH_CROSS: 十字形
  • ksize: 结构元素的大小,以元组 (width, height) 的形式指定。

示例

# -*- coding: utf-8 -*-
import cv2
import numpy as np# 创建黑色背景
img = np.zeros((300, 400), np.uint8)# 画一个大的白色矩形 (主体)
cv2.rectangle(img, (50, 50), (200, 200), 255, -1)# 在矩形中挖黑洞
cv2.circle(img, (100, 120), 15, 0, -1)
cv2.circle(img, (150, 80), 20, 0, -1)# 在矩形下方画两个相邻但断开的矩形
cv2.rectangle(img, (230, 100), (280, 150), 255, -1)
cv2.rectangle(img, (290, 100), (340, 150), 255, -1)# 在背景添加许多小白点噪声
for _ in range(150):x, y = np.random.randint(0, 400), np.random.randint(0, 300)img[y, x] = 255# --- 开运算(去噪点) ---
kernel_open = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel_open)# --- 闭运算(填黑洞 + 连接区域) ---
kernel_close = cv2.getStructuringElement(cv2.MORPH_RECT, (15, 15))
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel_close)# --- 先开运算再闭运算(组合效果) ---
open_then_close = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel_close)# 显示对比
cv2.imshow("Original", img)
cv2.imshow("Opening (Noise Removed)", opening)
cv2.imshow("Closing (Fill holes + Connect)", closing)
cv2.imshow("Open->Close (Clean + Fill)", open_then_close)cv2.waitKey(0)
cv2.destroyAllWindows()

执行效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/98205.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/98205.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/98205.shtml

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

相关文章

nginx常用命令(备忘)

一、引言:Nginx 为何成为前端开发必备工具 ** 在前端开发的广阔领域中,Nginx 已然成为了一个不可或缺的强大工具。它是一款轻量级的 HTTP 服务器和反向代理服务器,采用事件驱动的异步非阻塞处理方式框架,这赋予了它卓越的 I/O 性…

告别Qt Slider!用纯C++打造更轻量的TpSlider组件

组件运行效果展示 组件概述 TpSlider组件简介 TpSlider是PiXSingleGUI库中的可拖动滑块组件,支持水平和垂直两种方向的滑动操作。TpSlider.h:13-17该组件提供了完整的用户交互功能,包括鼠标拖拽、数值范围设置和实时反馈机制。 核心特性 双向支持&am…

sensitive-word 敏感词性能提升14倍优化全过程 v0.28.0

背景 有一天,群里收到小伙伴提的一个问题,为什么程序 sensitive-word 第一次执行这么慢? sensitive-word-131 初步验证 自己本地用 v0.27.1 验证了一下,确实很奇怪,第一次明显很慢。 为了排除一些干扰项,我们把一些…

4.6 多个光源

1.Include Files 2.The Second Light 3.Point Light1.Include Files 为了在着色器中实现多光源支持, 我们需要添加更多通道; 这些通道会包含几乎相同的代码, 为了避免代码重复, 我们将着色器代码移到一个包含文件中; 与光照着色器相同的文件夹中创建一个后缀为.cginc的文件, 将…

ANSYS HFSS的简单认识

HFSS(High Frequency Structure Simulator)是ANSYS公司开发的一款用于高频电磁场仿真的行业标准软件。它通过“计算”电磁波在各种结构中的行为,来帮助工程师设计天线、滤波器、微波电路、高速电子封装等。我用一个简单易懂的比喻来帮你理解整…

Codeforces Round 1046 (Div. 2) vp补题

只是签了三道题就燃尽了… 原题连接 A //不可能连续进三球 得分值差最多的只有00X00X00X00 bool jud(int a,int b){if(a!0&&b!0&&max(a,b)-2*(min(a,b)1)>1)return 0;if(a0||b0){if(abs(a-b)>3)return 0;}return 1; } void solve() {int a,b,c,d;cin…

水泵运行组态监控系统御控物联网解决方案

一、方案背景与需求分析随着工业4.0和智慧城市建设的推进,传统水泵监控方式存在数据孤岛、响应滞后、运维成本高等问题。本方案通过物联网(IoT)技术构建水泵运行组态监控系统,实现设备状态实时感知、故障预警、远程调控及能效优化…

海尔电视刷机

硬盘格式化只有ntfs和exfat怎么办,没有fat32 这台型号le32c31 连有线几天后突然卡系统启动中 电视系统崩溃了怎么办?一直显示启动中!三分钟解决问题,只要五元搞定!_哔哩哔哩_bilibili format H: /fs:FAT32 慢 disk…

Science Advances副主编:如何提高论文投稿接收率?

国际著名综合性学术期刊《Science Advances》每年可接到约20000份投稿,有高达90%的拒稿率,大部分稿件甚至没有进入评审阶段,作为该期刊的副主编之一,杜克大学的Warren Warren教授撰写了文章,给投稿人提出几点建议以提高…

少儿配音教育:广州声与色在线科技有限公司打造趣味课程,助力青少年语言能力提升

针对青少年语言表达能力培养需求,广州声与色在线科技有限公司推出 “少儿配音趣味课程”,通过动画、童话等青少年喜爱的形式,融合发声训练与兴趣培养,成为少儿素质教育的新选择。课程设计贴合 8-15 岁青少年认知特点:分…

【架构艺术】变更风险防控架构嵌入决策降噪模块的方法

在先前的文章中,我们聊到了一个变更观测任务可以通过什么样的方式对不同的变更防控能力做统一调度,达到优越的变更风险拦截效果。但是在实战当中,变更观测任务集成了很多能力,即便风险拦截率很高,但不同能力效果也有差…

LeetCode算法日记 - Day 33: 最长公共前缀、最长回文子串

目录 1. 最长公共前缀 1.1 题目解析 1.2 解法 1.3 代码实现 2. 最长回文子串 2.1 题目解析 2.2 解法 2.3 代码实现 1. 最长公共前缀 14. 最长公共前缀 - 力扣(LeetCode) 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&…

Python毕业设计推荐:基于Django的饮食计划推荐与交流分享平台 饮食健康系统 健康食谱计划系统

精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻 💖🔥作者主页:计算机毕设木哥🔥 💖 文章目录 一、项目介绍二…

物联网双轴倾角传感器厂家全面解析

内容概要本文旨在全面解析物联网双轴倾角传感器厂家的核心竞争力,为进口设备代理商及工业物联网项目提供实用选型指南。我们将深入探讨行业领先制造商的研发实力和生产标准,重点分析产品特性如低功耗设计优势、0.2高精度测量特性,以及CAN/电流…

Docker学习笔记-网络类型

Docker 网络类型1、Docker四种网络模式 (1)docker四种网络模式如下: Bridge contauner 桥接式网络模式Host(open) container 开放式网络模式Container(join) container 联合挂载式网络模式,是host网络模式的延伸None(Close)…

SDRAM详细分析-08 数据手册解读

大家好,这里是大话硬件。 前面我们梳理了很多关于内存的内容,不知道有没有人好奇,为什么要花这么大的精力做这些内容? 在4月份的时候,三星宣布将在2025年逐步停产DDR4内存颗粒,随后海力士和镁光也跟着一起,都宣布逐步停产DDR4颗粒。这三家半导体厂商在内存方面顶了半边…

Windows 环境下部署 MinIO 集群

文章目录介绍软件特点下载多机分布式集群部署1.前提准备2. 新建minio工作目录3. 编写运行命令4. 启动、测试5. nginx配置介绍 MinIO 是一款高性能、开源、云原生的分布式对象存储系统,专为私有云、公有云和边缘计算场景设计,完全兼容 Amazon S3 API&…

鸿蒙libxm2交叉编译

一开始先使用了lycium,但是没有编译通过 改为使用源码自带的配置文件编译 我使用的源码是libxml2-2.9.10.tar.gz 解压后进行下面的配置: root@ubuntu:/home/lw/libxml2-2.9.10# export OHOS_SDK=/home/lw/ohos-sdk/linuxroot@ubuntu:/home/lw/libxml2-2.9.10# export AS=…

MCAP :机器人数据容器的全面实践指南

Outline: MCAP 已形成完整工具链生态: Foxglove Studio:可视化分析工具mcap-cli:跨平台命令行工具AWS RoboMaker:原生云存储支持 随着 IEEE 正在制定的 P3196 机器人数据标准,MCAP 正在演进为行业基础架构的重要组成…

【Bluedroid】A2dp Source播放流程源码分析(7):蓝牙音频流启动流程深度解析(btif_av_stream_start)

本文深入分析Android Bluetooth协议栈中A2DP音频流启动的完整流程,从应用层调用btif_av_stream_start()开始,穿越BTIF、BTA、AVDTP多层架构,最终通过L2CAP发送AVDTP启动命令。揭示状态机驱动、异步消息传递、流控制等核心机制。并通过代码与日志结合的方式,揭示蓝牙音频流从…