python学opencv|读取图像(六十)先后使用cv2.erode()函数和cv2.dilate()函数实现图像处理

【1】引言

前序学习进程中,先后了解了使用cv2.erode()函数和cv2.dilate()函数实现图像腐蚀和膨胀处理的效果,相关文章链接为:

python学opencv|读取图像(五十八)使用cv2.erode()函数实现图像腐蚀处理-CSDN博客

python学opencv|读取图像(五十九)使用cv2.dilate()函数实现图像膨胀处理-CSDN博客

不难看出,这两种图像处理方法其实是反着来的,腐蚀会削减一些像素,膨胀会填充一些像素,如果先腐蚀后膨胀,图像也许会有新的效果,这就是本次学习的目标。

【2】代码测试

先腐蚀后膨胀的代码设计非常简单,这里直接给出完整代码:

import cv2 as cv  # 引入CV模块
import numpy as np  # 引入numpy模块# 定义核
k = np.zeros((3, 3), np.uint8)  # 定义核
k1 = np.ones((5, 5), np.uint8)  # 定义核
k2 = np.ones((7, 7), np.uint8)  # 定义核# 读取图片
srcm = cv.imread('srcck.png')  # 读取图像srcck.png# 腐蚀计算
dst = cv.erode(srcm, k)  # 图像取平均值,像素核大小为(3,3)
dst1 = cv.erode(srcm, k1)  # 图像取平均值,像素核大小为(3,3)
dst2 = cv.erode(srcm, k2)  # 图像取平均值,像素核大小为(3,3)
dstpz1 = cv.dilate(dst, k) #图像膨胀运算,膨胀核大小为(3,3)
dstpz2 = cv.dilate(dst1, k1) #图像膨胀运算,膨胀核大小为(3,3)
dstpz3 = cv.dilate(dst2, k2) #图像膨胀运算,膨胀核大小为(3,3)
# 显示结果
cv.imshow('srcm ', srcm)
cv.imshow('dstpz1', dstpz1)
cv.imwrite('dstpz1.png', dstpz1)
cv.imshow('dstpz2 ', dstpz2)
cv.imwrite('dstpz2.png', dstpz2)
cv.imshow('dstpz3 ', dstpz3)
cv.imwrite('dstpz3.png', dstpz3)# 窗口控制
cv.waitKey()  # 图像不关闭
cv.destroyAllWindows()  # 释放所有窗口

由于腐蚀和膨胀都需要一个核,所以在引入必要模块后,定义了核:

# 定义核
k = np.zeros((3, 3), np.uint8)  # 定义核
k1 = np.ones((5, 5), np.uint8)  # 定义核
k2 = np.ones((7, 7), np.uint8)  # 定义核

之后按照先腐蚀后膨胀的顺序,对图片依次处理: 

# 腐蚀和膨胀计算
dst = cv.erode(srcm, k)  # 图像取平均值,像素核大小为(3,3)
dst1 = cv.erode(srcm, k1)  # 图像取平均值,像素核大小为(5,5)
dst2 = cv.erode(srcm, k2)  # 图像取平均值,像素核大小为(7,7)
dstpz1 = cv.dilate(dst, k) #图像膨胀运算,膨胀核大小为(3,3)
dstpz2 = cv.dilate(dst1, k1) #图像膨胀运算,膨胀核大小为(5,5)
dstpz3 = cv.dilate(dst2, k2) #图像膨胀运算,膨胀核大小为(7,7)

代码运行相关的图像有:

图1 初始图像srcck.png

图2 先腐蚀后膨胀图像dstpz1.png

图3 先腐蚀后膨胀图像dstpz2.png

图4 先腐蚀后膨胀图像dstpz3.png

由图2至图4可知,随之先腐蚀后膨胀图像操作核的扩大,图像也越来越趋向于模糊,不过中央的主体形象得到很好的保留,周围的细节被逐渐放弃。

如果想进一步测试,比如增强膨胀的效果,就可以把膨胀核变小,比如修改第三章图像膨胀核大小为:

dstpz3 = cv.dilate(dst2, k) #图像膨胀运算,膨胀核大小为(7,7)

此时代码运行后获得的图像为:

图5 先腐蚀后膨胀图像dstpz3.png-膨胀作用凸显

由图5可知,减小膨胀核后,膨胀作用凸显,人物形象虽然模糊,但轮廓显著放大。

【3】总结

使用python+opencv检验了对图像先后使用cv2.erode()函数和cv2.dilate()函数进行先腐蚀后膨胀操作的效果。

 

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

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

相关文章

apache-poi导出excel数据

excel导出 自动设置宽度&#xff0c;设置标题框&#xff0c;设置数据边框。 excel导出 添加依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency>…

STM32EXTI外部中断

EXTI外部中断 中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行&#xff08;有点像函…

kafka生产端之架构及工作原理

文章目录 整体架构元数据更新 整体架构 消息在真正发往Kafka之前&#xff0c;有可能需要经历拦截器&#xff08;Interceptor&#xff09;、序列化器&#xff08;Serializer&#xff09;和分区器&#xff08;Partitioner&#xff09;等一系列的作用&#xff0c;那么在此之后又会…

STM32 Unix时间戳

Unix时间戳 Unix 时间戳&#xff08;Unix Timestamp&#xff09;定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数&#xff0c;不考虑闰秒 时间戳存储在一个秒计数器中&#xff0c;秒计数器为32位/64位的整型变量 世界上所有时区的秒计数器相同&#xff0c;不同时区通过…

SSM仓库物品管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.用户登录代码&#xff1a;2.保存物品信息代码&#xff1a;3.删除仓库信息代码&#xff1a; 一、项目演示 项目演示地址&#xff1a; 视频地址 二、项目介绍 项目描述&#xff1a;这是一个基于SSM框架开发的仓库…

[渗透测试]热门搜索引擎推荐— — shodan篇

[渗透测试]热门搜索引擎推荐— — shodan篇 免责声明&#xff1a;本文仅用于分享渗透测试工具&#xff0c;大家使用时&#xff0c;一定需要遵守相关法律法规。 除了shodan&#xff0c;还有很多其他热门的&#xff0c;比如&#xff1a;fofa、奇安信的鹰图、钟馗之眼等&#xff0…

绕组电感 - Ansys Maxwell 磁通链与电流

在本博客中&#xff0c;我将演示如何使用 Ansys Maxwell 中磁瞬态求解器的磁通链和电流结果来计算绕组电感。Ansys Maxwell 磁瞬态求解器在场计算中考虑了涡流效应&#xff0c;我将展示一种使用磁通链和电流结果来计算绕组电感的简单方法。 实际上&#xff0c;电感是非线性的…

Spring Boot牵手Redisson:分布式锁实战秘籍

一、引言 在当今的分布式系统架构中,随着业务规模的不断扩大和系统复杂度的日益增加,如何确保多个服务节点之间的数据一致性和操作的原子性成为了一个至关重要的问题。在单机环境下,我们可以轻松地使用线程锁或进程锁来控制对共享资源的访问,但在分布式系统中,由于各个服务…

Fiddler Classic(HTTP流量代理+半汉化)

目录 一、关于Fiddler (一) Fiddler Classic (二) Fiddler Everywhere (三) Fiddler Everywhere Reporter (四) FiddlerCore (五) 总结 二、 软件安全性 1. 软件安装包 2. 软件汉化dll 三、安装与半汉化 1. 正常打开安装包点击下一步安装即可&#xff0c;安装路径自…

C++适用于所有输入法的解决方案(切换输入法)

文章目录 1、方法 1&#xff1a;模拟按键切换到英文模式2、&#x1f680; 方法 2&#xff1a;直接切换到美式键盘&#xff08;适用于所有输入法&#xff09;3、&#x1f680; 方法 3&#xff1a;遍历所有输入法&#xff0c;选择第一个英文输入法4、&#x1f525; 结论5、&#…

AI大语言模型

一、AIGC和生成式AI的概念 1-1、AIGC Al Generated Content&#xff1a;AI生成内容 1-2、生成式AI&#xff1a;generative ai AIGC是生成式 AI 技术在内容创作领域的具体应用成果。 目前有许多知名的生成式 AI&#xff1a; 文本生成领域 OpenAI GPT 系列百度文心一言阿里通…

Visual Studio Code中文出现黄色框子的解决办法

Visual Studio Code中文出现黄色框子的解决办法 一、vsCode中文出现黄色框子-如图二、解决办法 一、vsCode中文出现黄色框子-如图 二、解决办法 点击 “文件”点击 “首选项”点击 “设置” 搜索框直接搜索unicode选择“文本编辑器”&#xff0c;往下滑动&#xff0c;找到“Un…

《艾尔登法环》运行时弹窗“由于找不到vcruntime140.dll,无法继续执行代码”要怎么解决?

宝子们&#xff0c;是不是在玩《艾尔登法环》的时候&#xff0c;突然弹出一个提示&#xff1a;“由于找不到vcruntime140.dll&#xff0c;无法继续执行代码”&#xff1f;这可真是让人着急上火&#xff01;别慌&#xff0c;今天就给大家唠唠这个文件为啥会丢&#xff0c;还有怎…

LabVIEW商业软件开发

在商业软件开发和仪器自动测试领域&#xff0c;LabVIEW以其图形化编程方式、高效的数据采集能力和强大的硬件集成优势&#xff0c;成为众多工程项目的核心开发工具。然而&#xff0c;商业软件的开发远不止编写代码和实现功能那么简单&#xff0c;尤其是在仪器自动测试领域&…

第40天:Web开发-JS应用VueJS框架Vite构建启动打包渲染XSS源码泄露代码审计

#知识点 1、安全开发-VueJS-搭建启动&打包安全 2、安全开发-VueJS-源码泄漏&代码审计 一、Vue搭建创建项目启动项目 1、Vue 框架搭建->基于nodejs搭建&#xff0c;安装nodejs即可 参考&#xff1a;https://cn.vuejs.org/ 已安装18.3或更高版本的Node.js 2、Vue 创建…

6、使用one-api管理统一管理大模型,并开始使用本地大模型

文章目录 本节内容介绍集中接入&#xff1a;将大模型统一管理起来当使用了大模型代理大模型代理示例 开源模型&#xff1a;如何使用Hugging Face上的模型modelscope使用 pipeline 调用模型用底层实现调用模型流式输出 如何在项目中使用开源模型使用 LangChain使用集中接入开始使…

Winform开发框架(蝇量级) MiniFramework V2.1

C/S框架网与2022年发布的一款蝇量级开发框架&#xff0c;适用于开发Windows桌面软件、数据管理应用系统、软件工具等轻量级软件&#xff0c;如&#xff1a;PLC上位机软件、数据采集与分析软件、或企业管理软件&#xff0c;进销存等。适合个人开发者快速搭建软件项目。 适用开发…

【漫话机器学习系列】087.常见的神经网络最优化算法(Common Optimizers Of Neural Nets)

常见的神经网络优化算法 1. 引言 在深度学习中&#xff0c;优化算法&#xff08;Optimizers&#xff09;用于更新神经网络的权重&#xff0c;以最小化损失函数&#xff08;Loss Function&#xff09;。一个高效的优化算法可以加速训练过程&#xff0c;并提高模型的性能和稳定…

傅里叶公式推导(一)

文章目录 三角函数系正交证明图观法数学证明法计算当 n不等于m当 n等于m&#xff08;重点&#xff09; 其它同理 首先要了解的一点基础知识&#xff1a; 三角函数系 { sin ⁡ 0 , cos ⁡ 0 , sin ⁡ x , cos ⁡ x , sin ⁡ 2 x , cos ⁡ 2 x , … , sin ⁡ n x , cos ⁡ n x ,…

1. 构建grafana(版本V11.5.1)

一、grafana官网 https://grafana.com/ 二、grafana下载位置 进入官网后点击downloads&#xff08;根据自己的需求下载&#xff09; 三、grafana安装&#xff08;点击下载后其实官网都写了怎么安装&#xff09; 注&#xff1a;我用的Centos&#xff0c;就简略的写下我的操作步…