当前位置: 首页 > news >正文

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.mrgr.cn/news/90070.html

相关文章:

  • 极客说|利用 Azure AI Agent Service 创建自定义 VS Code Chat participant
  • 六、 通用异步收发器UART
  • Linux ltrace跟踪入门
  • SQL高级技巧:高效获取两表交集数据的三种方法(JOIN、IN、EXISTS)
  • Lua中文语言编程源码-第十一节,其它小改动汉化过程
  • 人工智能A*-启发式函数、增量式 A* 算法
  • PHP中的魔术方法
  • 在请求时打印出实际代理的目标地址
  • 机器学习分类整理【表格版】分类角度、名称、概念、常见算法、典型案例
  • 数据结构之排序
  • 线程上下文-ThreadLocal原理
  • 百度高德地图坐标转换
  • 网络防御高级02-综合实验
  • vue学习5
  • win10 llamafactory模型微调相关① || Ollama运行微调模型
  • 网络计算机的相关概念整理
  • FreeRTOS实战项目——STM32F103ZET6智能门禁系统(二)
  • 活动预告 |【Part 2】Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁
  • JavaScript中的防抖与节流:提升性能的关键技巧
  • 保姆级教程Docker部署Zookeeper官方镜像
  • 第3章 城市隧道工程与城市轨道交通工程 3.2 地下水控制
  • 【AIGC】DeepSeek本地部署方法详解:基于Ollama与LM-Studio
  • deepseek+kimi自动生成ppt
  • 策略模式(Strategy)
  • react 路由配置:从入门到精通
  • 解锁 DeepSeek 模型高效部署密码:蓝耘平台深度剖析与实战应用