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

ops/2025/2/11 20:36:23/

【1】引言

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

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

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

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

【2】代码测试

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

python">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可知,随之先腐蚀后膨胀图像操作核的扩大,图像也越来越趋向于模糊,不过中央的主体形象得到很好的保留,周围的细节被逐渐放弃。

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

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

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

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

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

【3】总结

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

 


http://www.ppmy.cn/ops/157607.html

相关文章

【C语言标准库函数】标准输入输出函数详解[4]:二进制文件读写函数

目录 一、fread() 函数 1.1. 函数简介 1.2. fread 使用场景 1.3. 注意事项 1.4. 示例 二、fwrite() 函数 2.1. 函数简介 2.2. fwrite 使用场景 2.3. 注意事项 2.4. 示例 三、总结 在 C 语言中,二进制文件读写函数允许以二进制形式对文件进行读写操作&…

索引失效的14种常见场景

在 MySQL 中,索引有时可能会失效,导致查询性能下降。以下是常见的 14 种场景,在这些场景下,索引可能会失效 1. 使用 OR 连接多个条件 场景: 当查询中包含 OR 时,如果 OR 连接的多个条件中有一个没有使用索引&#xff0…

自动化xpath定位元素(附几款浏览器xpath插件)

在 Web 自动化测试、数据采集、前端调试中,XPath 仍然是不可或缺的技能。虽然 CSS 选择器越来越强大,但面对复杂 DOM 结构时,XPath 仍然更具灵活性。因此,掌握 XPath,不仅能提高自动化测试的稳定性,还能在爬…

C# 两种方案实现调用 DeepSeek API

目录 序 开发运行环境 访问API的一个通用方法 原生官网实现 申请 API key 调用实现 调用示例 腾讯云知识引擎原子调用 申请 API key 调用示例 小结 序 DeepSeek(深度求索) 最近可谓火爆的一塌糊涂,具体的介绍这里不再赘述&#x…

【Golang学习之旅】gRPC 与 REST API 的对比及应用

文章目录 1. 引言2. gRPC 和 REST API 的核心概念2.1 什么是 REST API?2.2 什么是 gRPC? 3. gRPC 和 REST API 的对比分析4. Golang 实现 REST API 示例4.1 安装 Gin4.2 代码实现 5. Golang 实现 gRPC 示例5.1 安装 gRPC 相关依赖5.2 定义 gRPC 服务&…

Kubernetes架构原则和对象设计(三)

云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes常见问题解答 本文主要对kubernetes的核心技术概念和核心A…

mybatis 是否支持延迟加载?延迟加载的原理是什么?

1. MyBatis 是否支持延迟加载? 是的,MyBatis 支持延迟加载。延迟加载的主要功能是推迟数据加载的时机,直到真正需要时再去加载。这种方式能提高性能,尤其是在处理关系型数据时,可以避免不必要的数据库查询。 具体来说…

一文学会:用DeepSeek R1/V3 + AnythingLLM + Ollama 打造本地化部署的个人/企业知识库,无须担心数据上传云端的泄露问题

文章目录 前言一、AnythingLLM 简介&基础应用1.主要特性2.下载与安装3.配置 LLM 提供商4.AnythingLLM 工作区&对话 二、AnythingLLM 进阶应用:知识增强使用三、AnythingLLM 的 API 访问四、小结1.聊天模式2.本地存储&向量数据库 前言 如果你不知道Olla…