十、计算机视觉-腐蚀操作

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、什么是腐蚀
  • 二、如何实现腐蚀
  • 三、腐蚀的原理


一、什么是腐蚀

在我们生活中常会见到腐蚀,比如金属表面受到氧化或其他化学物质的侵蚀,导致金属表面出现腐蚀、或者生锈。
木材受到细菌或者昆虫的侵蚀,导致木材内部和表面逐渐腐朽或者磨损。
在计算机世视觉中腐蚀操作和现实中类似,腐蚀主要用于减小或消除图像中的边缘或细小的物体。在这个操作中,我们使用一个称为结构元素的小矩形或圆形区域来“侵蚀”图像中的像素。具体来说,当结构元素与图像中的像素进行比较时,只有当结构元素覆盖的所有像素都是前景像素(白色像素)时,该像素才被视为前景像素,否则被视为背景像素(黑色像素)。通过这种方式,腐蚀操作可以使前景物体的边界变得更加平滑,并消除小的物体或者连接较弱的边缘。
你可以想象我们有一个雕刻的石像,但是石像有点瑕疵,我们需要用到工具(结构元素或者叫卷积核)来把他给打磨一下,让它看起来更符合我们的要求。这就是我们使用腐蚀的目的。

二、如何实现腐蚀

先上代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
image = cv2.imread('./img/yunfeng2.jpg')
# 定义结构元素
kernel = np.ones((5,5),np.uint8)# 执行腐蚀操作
erode_image = cv2.erode(image, kernel, iterations=1)# 显示原始图像和腐蚀后的图像
cv2.imshow('original', image)
cv2.imshow('erod', eroded_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

看下结果: 上面是原图,下面是腐蚀后的图
在这里插入图片描述
可以看到原图有一些线和点 在腐蚀操作后都消失了,但是我们字好像也变得细了一些。

三、腐蚀的原理

我们看下上面的腐蚀代码

kernel = np.ones((5,5),np.uint8)
erode_image = cv2.erode(image, kernel, iterations=1)

kernel是一个卷积核 也就是我们刚开始提到的结构元素,我们设置为他为5x5像素的。
我们开始介绍时提到腐蚀操作的过程是结构元素与图像中的像素进行比较时,只有当结构元素覆盖的所有像素都是前景像素(白色像素)时,该像素才被视为前景像素,否则被视为背景像素(黑色像素)。
你可以想象一下,现在有一个5x5像素的方格,
方格内容可以根据需要自定义,以适应不同的图像处理任务,例如腐蚀、膨胀、开运算、闭运算等形态学操作,我们这里假定方格的内容比如全是1。
方格在图像上滑动,并且方格与重叠的图像区域的每个像素进行逐个比较假设我们方格移动到上方图像的一个杂点上 这个杂点可能包含多个像素,我们方格对这个杂点每个像素都要比较, 方格覆盖其中一个像素 ,方格覆盖的区域有黑色,那当前这个点就会被腐蚀掉。如果方格覆盖范围全是白色,那就不会腐蚀。
如果还是不明白 可以看下图:
我吧上图的一个杂点给放大 如下图
在这里插入图片描述
这个白色的就是杂点,红色方格就是我们的5x5像素的方格也就是结构元素,方格以自身中心点的位置为基准进行移动的,中心位置就是上图箭头标示的位置。可以看到,方格中心点在杂点的第一个像素上时,方格区域内有黑色像素,所以,杂点的第一个像素就被腐蚀掉,一次类推 逐渐移动杂点的每一个像素。
继续移动到下图的位置:
在这里插入图片描述
我们发现 方格内没有了黑色部分,那与方格中心点重叠的这个像素就不会被腐蚀。有人可能会问,我们刚才演示的云峰那个图片上腐蚀操作后没有白色的杂点了。我们来把刚才腐蚀后的图片方法看一下,
在这里插入图片描述
其实以像素方式去看的话 还是有杂点,只不过太小了 我们视觉肯定看不到了。
再回到我们上面提到的问题:为什么字变细了?相信聪明的你已经有答案了。
我们想一下,我们如果不是设置的5x5的方格而是设置更大或者更小的方格,会对结果有影响吗,有了上面的分析我们可以得出以下结论:
方格的大小可以影响着:
1.腐蚀程度: 结构元素的大小决定了腐蚀操作的程度。较大的结构元素通常会产生更强的腐蚀效果,而较小的结构元素则会产生较弱的腐蚀效果。因此,结构元素的大小会直接影响图像中前景物体的大小和形状。
2.细节保留: 较小的结构元素能够更好地保留图像中的细节和小的特征,因为它们只会影响局部区域。相反,较大的结构元素可能会模糊或丢失一些细小的特征。
3.计算复杂度: 较大的结构元素意味着需要在图像的更多位置执行比较操作,这会增加计算的复杂度和运行时间。因此,在选择结构元素大小时需要考虑到计算资源的限制。

上面腐蚀操作还有一个参数

erode_image = cv2.erode(image, kernel, iterations=1)

iterations代表迭代次数,也就是腐蚀几次,1代表只腐蚀1次,设置2就是腐蚀2次。还是刚才的图片我们如果腐蚀2次,那我们上面说的 还保留一点的杂点就会被腐蚀掉,但是同样字也会变得更细。实际效果大家可以自行测试。

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

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

相关文章

观察者模式和发布订阅模式的区别

从下图中可以看出,观察者模式中观察者和目标直接进行交互,而发布订阅模式中统一由调度中心进行处理,订阅者和发布者互不干扰。这样一方面实现了解耦,还有就是可以实现更细粒度的一些控制。比如发布者发布了很多消息,但…

Project_Euler-06 题解

Project_Euler-06 题解 题目描述 两个公式 等差数列求和公式 i i i项: a i a_{i} ai​ 项数: n n n 公差: d d d 和: S n S_{n} Sn​ a n a 1 ( n − 1 ) d S n n ( a 1 a n ) 2 a_{n} a_{1} (n - 1)d\\ S_{n} \frac{n(a_…

深究 DevOps 与平台工程的区别

今天,我们将讨论平台工程和 DevOps 的关系。尽管这两个概念有一些共同点,但它们仍然是截然不同的,我们将具体了解它们之间的区别。本文旨在解释当代软件工程中的这两个基本概念。通过实际案例,我们将分别说明这两个方法如何塑造了…

leetcode刷题电话号码的字母组合(人工智能解答版本)

题目描述 解题思路 一开始想用暴力破解的方法来进行解题,就是循环。但是想到随着数字的增多,循环行不通。想到最近使用的一个人工智能助手,于是我把题目发送给了它,直接给出了递归的解决方法。递归分为两个条件,一个就…

【k近邻】 K-Nearest Neighbors算法原理及流程

【k近邻】 K-Nearest Neighbors算法原理及流程 【k近邻】 K-Nearest Neighbors算法距离度量选择与数据维度归一化 k近邻算法(K-Nearest Neighbors,简称KNN)是一种常用的监督学习算法,可以用于分类和回归问题。在OpenCV中&#xff…

【关于python变量类型学习笔记】

python的变量类型 在创建变量时会在内存中开辟一个空间,变量是存储在内存中的值。 根据变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。 变量可以指定不同的数据类型,这些变量可以存储整数,…

C++基础学习

string char转string vector转string 截取字符串 字符串反转 string转int 正则匹配

Nginx 反向代理配置

Nginx就不废话了,web服务器。 最近在备案一个域名,想要备案,部署一个服务器,平常很少自己配置Nginx,今天记录下。 1、反向代理 正向代理 指 客户端通过代理访问后端服务 反向代理 指 服务器推出一个客户&#xff0…

环信IM Android端实现华为推送详细步骤

首先我们要参照华为的官网去完成 ,以下两个配置都是华为文档为我们提供的 1.https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides/android-config-agc-0000001050170137#section19884105518498 2.https://developer.huawei.com/consumer/cn/doc/HMSCore…

#gStore-weekly | gMaster功能详解之数据库管理

gMaster提供了数据库管理功能。该功能可以对集群中的数据库进行集中管理,可以查看各个数据库详细信息。能够方便的对数据库进行新建、构建、导出、备份、还原、删除操作。 登录gMaster,点击左侧菜单【数据库】下的【数据库管理】,进入数据库…

【开源】JAVA+Vue.js实现高校学生管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生管理模块2.2 学院课程模块2.3 学生选课模块2.4 成绩管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学院课程表3.2.3 学生选课表3.2.4 学生成绩表 四、系统展示五、核心代码5.1 查询课程5.2 新…

动态获取 微信小程序appid / 自定义启动命令

官网:https://uniapp.dcloud.net.cn/collocation/package.html#%E7%94%A8%E6%B3%95 小程序开发完成之后需要一套代码多个小程序使用,每次都需要在manifest.json文件中手动修改,大大增加了开发的复杂度。 官网:https://uniapp.dcl…

内网搭建阿里-龙蜥镜像站

1.问题:官网BUG 本地做 yum 仓库,下载的文件,只有 23 版本的,其他的版本没有文件(版本23,占用2.1T后,一直不下载其它版本;) 2.解决方案: 2.1. rsync剔除不要的版本 [rootlocalh…

三维GIS开发的就业前景

一、前言 三维GIS是一个伪概念,GIS是地理信息系统,三维GIS就是三维地理信息系统,在课本上,专业概念上,也没有这一说法吧,所以三维GIS,就是技术人员造概念拼凑造出来的,本质上就是GIS三维可视化…

SSH连接密码问题:原因、表现与解决方案

SSH连接密码问题:原因、表现与解决方案 写在最前面1. 密码错误2. SSH服务配置问题3. 账户锁定或禁用4. 密钥认证问题5. SSH版本不兼容6. 服务器负载或连接数过多7. IP地址被限制 小结 写在最前面 SSH(Secure Shell)是一种网络协议&#xff0…

抖音博主老阳推荐的人力RPO蓝海项目如何?【转载】一位实操者的经验之谈

在刷短视频的时候,被抖音博主老阳讲的职场干货吸引了,讲的也比较有感染力,深入了解之后知道了他们有帮推荐副业项目,由于我有干人力资源的经验,对老阳推荐的人力RPO项目感兴趣。 初识人力RPO 但是看网上有人说被骗什么…

Linux搭建JavaEE环境

Linux搭建JavaEE环境 需要在 Linux 下进行 JavaEE 的开发,我们需要安装如下软件 JDKtomcatmysqlidea 安装JDK 安装步骤 首先去官网下载jdk的linux版本 下载地址:https://www.oracle.com/cn/java/technologies/downloads/ 1) mkdir /opt/jdk 2) 通过 …

如何使用 NFTScan NFT API 在 Mantle 网络上开发 Web3 应用

Mantle Network 是建立在以太坊区块链之上的第 2 层扩展解决方案,采用了 Optimistic Rollups 技术,由 BitDAO 孵化,以提供比以太坊更快速和更经济的交易体验。由于 Mantle 基础链构建在 OP Stack 之上并与 EVM 兼容,因此以太坊网络…

2023年全球前端大技术大会(GMTC北京站2023):核心内容与学习收获(附大会核心PPT下载)

此次峰会是一次内容丰富、有深度和广度的技术盛会。参会者不仅可以了解前端技术的最新发展和未来趋势,还可以与业界专家交流心得,提升自己的技能和能力。同时,此次大会也促进了全球前端社区的交流和合作,推动了前端技术的创新和发…

fastApi笔记04-查询参数和字符串校验

额外校验 使用Query可以对查询参数添加校验 from typing import Unionfrom fastapi import FastAPI, Queryapp FastAPI()app.get("/items/") async def read_items(q: Union[str, None] Query(defaultNone, max_length50)):results {"items": [{"…