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

【1】引言

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

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

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

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

python学opencv|读取图像(六十)先后使用cv2.erode()函数和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

# 图像计算
dstpz1 = cv.dilate(srcm, k)  # 图像膨胀运算,膨胀核大小为(3,3)
dstpz2 = cv.dilate(srcm, k1)  # 图像膨胀运算,膨胀核大小为(5,5)
dstpz3 = cv.dilate(srcm, k2)  # 图像膨胀运算,膨胀核大小为(7,7)

dstfs1 = cv.erode(dstpz1, k)  # 图像腐蚀运算,像素核大小为(3,3)
dstfs2 = cv.erode(dstpz2, k1)  # 图像腐蚀运算,像素核大小为(5,5)
dstfs3 = cv.erode(dstpz3, k2)  # 图像腐蚀运算,像素核大小为(7,7)

# 显示结果
cv.imshow('srcm ', srcm)
cv.imshow('dstfs1', dstfs1)
cv.imwrite('dstfs1.png', dstfs1)
cv.imshow('dstfs2 ', dstfs2)
cv.imwrite('dstfs2.png', dstfs2)
cv.imshow('dstfs3 ', dstfs3)
cv.imwrite('dstfs3.png', dstfs3)

# 窗口控制
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)  # 定义核

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

复制代码
# 图像计算
dstpz1 = cv.dilate(srcm, k)  # 图像膨胀运算,膨胀核大小为(3,3)
dstpz2 = cv.dilate(srcm, k1)  # 图像膨胀运算,膨胀核大小为(5,5)
dstpz3 = cv.dilate(srcm, k2)  # 图像膨胀运算,膨胀核大小为(7,7)

dstfs1 = cv.erode(dstpz1, k)  # 图像腐蚀运算,像素核大小为(3,3)
dstfs2 = cv.erode(dstpz2, k1)  # 图像腐蚀运算,像素核大小为(5,5)
dstfs3 = cv.erode(dstpz3, k2)  # 图像腐蚀运算,像素核大小为(7,7)

代码运行相关的图像有:

++图1 初始图像srcck.png++

++图2 先膨胀后腐蚀图像dstfs1.png++

++图3 先膨胀后腐蚀图像dstfs2.png++

++图4 先膨胀后腐蚀图像dstfs3.png++

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

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

python 复制代码
dstfs3 = cv.erode(dstpz3, k)  # 图像腐蚀运算,像素核大小为(3,3)

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

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

由图5可知,减小腐蚀核后,腐蚀作用凸显,人物形象不仅模糊,脸部的细节也减少了很多。

【3】总结

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

相关推荐
DKPT39 分钟前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
好好研究3 小时前
学习栈和队列的插入和删除操作
数据结构·学习
彭祥.4 小时前
Jetson边缘计算主板:Ubuntu 环境配置 CUDA 与 cudNN 推理环境 + OpenCV 与 C++ 进行目标分类
c++·opencv·分类
烛阴4 小时前
简单入门Python装饰器
前端·python
新中地GIS开发老师4 小时前
新发布:26考研院校和专业大纲
学习·考研·arcgis·大学生·遥感·gis开发·地理信息科学
好开心啊没烦恼4 小时前
Python 数据分析:numpy,说人话,说说数组维度。听故事学知识点怎么这么容易?
开发语言·人工智能·python·数据挖掘·数据分析·numpy
面朝大海,春不暖,花不开4 小时前
使用 Python 实现 ETL 流程:从文本文件提取到数据处理的全面指南
python·etl·原型模式
SH11HF5 小时前
小菜狗的云计算之旅,学习了解rsync+sersync实现数据实时同步(详细操作步骤)
学习·云计算
Tony沈哲5 小时前
macOS 上为 Compose Desktop 构建跨架构图像处理 dylib:OpenCV + libraw + libheif 实践指南
opencv·算法
Frank学习路上5 小时前
【IOS】XCode创建firstapp并运行(成为IOS开发者)
开发语言·学习·ios·cocoa·xcode