Opencv中的erode和dilate(腐蚀和膨胀-python实现)

article/2025/8/29 5:31:52

文章目录

    • 1.腐蚀原理
      • (1)具体实现过程
      • (2).函数讲解
    • (3).代码实战
    • 2.膨胀原理
      • (1)具体实现过程
      • (2)函数讲解
      • (3)代码实现

1.腐蚀原理

(1)具体实现过程

腐蚀会把物体的边界腐蚀掉,卷积核沿着图像滑动,如果卷积核对应的原图的所有像素值为1,那么中心元素就保持原来的值,否则变为零。主要应用在去除白噪声,也可以断开连在一起的物体。
在这里插入图片描述
在这里插入图片描述
B(Element)对图像A进行腐蚀的整个过程如下:
⑴ 用结构元素B,扫描图像A的每一个像素
⑵ 用结构元素B与其覆盖的二值图像A做“与”操作
⑶ 如果都为1,结果图像的该像素为1。否则为0
腐蚀处理的结果是使原来的二值图像减小一圈。

通过上面的卷积过程其实也可以这样解释腐蚀:当我们对一张图像进行腐蚀的时候,也就是element单元区域内像素值的最小值要么是0(黑色),要么是1(白色);那么只要element区域中包含有黑色,那么最终得到黑色,只有当element区域内全为白色的,结果才是白色,所以对于白色的边缘区域都会变成黑色,和原来的图像相比,最终的图片白色区域减少,最后也就是达到了“腐蚀”的效果(图片的看上去像是被腐蚀了一样)。
在这里插入图片描述
图片来源:https://zhuanlan.zhihu.com/p/110787009


(2).函数讲解

:erode(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None):
Src:输入的原始图像
Kernel:结构单元(structuring element);
Dst:输出图像
Anchor:结构单元的锚点位置,默认值为(-1,-1),表示结构单元中心
Iterations:腐蚀迭代的次数
borderType:用于推断图像外部像素的某种边界模式。注意它有默认值 BORDER_DEFAULT
borderValue:边界值(如果是常量边界)。默认morphologyDefaultBorderValue具有特殊含义。对于侵蚀,它被转换为+\inf;对于膨胀,它被转换为-\inf,这意味着只有在图像内部的像素上才能有效地计算最小值(最大值)。


(3).代码实战

import os
import cv2
import numpy as npdef ErodeFilter(img_path='images/lenna.png'):img_src=cv2.imread(img_path)img=cv2.resize(src=img_src,dsize=(500,500))img=cv2.cvtColor(src=img,code=cv2.COLOR_BGR2GRAY)kernel=np.ones((7,7),dtype=np.uint8)img=cv2.erode(src=img,kernel=kernel,iterations=1)cv2.imshow('img_src',img_src)cv2.imshow('img',img)cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == '__main__':print('Pycharm')ErodeFilter()

在这里插入图片描述


2.膨胀原理

(1)具体实现过程

结构单元(structuring element)在原始图像上进行滑动,把结构元锚点位置的图像像素点的灰度值设置为结构元值为1的区域对应图像区域像素的最大值。

B(Element)对图像A进行膨胀的整个过程如下:
⑴ 用结构元素B,扫描图像A的每一个像素
⑵ 用结构元素B与其覆盖的二值图像A做“或”操作
⑶ 如果都为0,结果图像的该像素为0。否则为1;
腐蚀处理的结果是使原来的二值图像减小一圈。

在这里插入图片描述

(2)函数讲解

dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None): 

Src:输入的原始图像
Kernel:结构单元(structuring element);
Dst:输出图像
Anchor:结构单元的锚点位置,默认值为(-1,-1),表示结构单元中心
Iterations:腐蚀迭代的次数
borderType:用于推断图像外部像素的某种边界模式。注意它有默认值 BORDER_DEFAULT
borderValue:边界值(如果是常量边界)。默morphologyDefaultBorderValue具有特殊含义。对于侵蚀,它被转换为+\inf;对于膨胀,它被转换为-\inf,这意味着只有在图像内部的像素上才能有效地计算最小值(最大值)

获取卷积核:
https://mydreamambitious.blog.csdn.net/article/details/125265838

(3)代码实现

import os
import cv2
import numpy as npdef DilateFilter(img_path='images/Exen.png'):img_src=cv2.imread(img_path)img=cv2.resize(src=img_src,dsize=(500,500))img=cv2.cvtColor(src=img,code=cv2.COLOR_BGR2GRAY)kernel=cv2.getStructuringElement(shape=cv2.MORPH_RECT,ksize=(7,7))img=cv2.dilate(src=img,kernel=kernel,iterations=1)cv2.imshow('img_src',img_src)cv2.imshow('img',img)cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == '__main__':print('Pycharm')DilateFilter()

在这里插入图片描述


http://chatgpt.dhexx.cn/article/PoNvos8p.shtml

相关文章

OpenCV-Python腐蚀膨胀函数erode、dilate使用详解

☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░ 一、引言 在《OpenCV-Python图像处理:腐蚀和膨胀原理及erode、dilate函数介绍:https://blog.csdn.net/LaoYuanPython/article/details/109441709》介绍了图像腐蚀和膨胀的基本原理&a…

OpenCV-Python图像处理:腐蚀和膨胀原理及erode、dilate函数介绍

☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░ 一、引言 关于图像的腐蚀和膨胀,网上介绍的资料非常多,老猿也看了很多,总体来说主要偏向于就使用OpenCV腐蚀和膨胀函数的应用,另外原理介绍的有一小部分&#…

opencv之dilate()函数

概述 dilate()函数可以对输入图像用特定结构元素进行膨胀操作,该结构元素确定膨胀操作过程中的邻域的形状,各点像素值将被替换为对应邻域上的最大值: API说明 C++ API: void cv::dilate(InputArraysrc,(原始图像:通道数不限,depth必须是CV_8U,CV_16U,CV_16S,CV_…

OpenCV-膨胀cv::dilate

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 原理 形态学是图像处理中常见的名词,图像处理的形态学基本属于数学形态学的范畴,是一门建立在格论和拓扑…

【图像处理】腐蚀(erode)和膨胀(dilate)

【图像处理】腐蚀(erode)和膨胀(dilate) 原理腐蚀(erode)膨胀(dilate) OpenCV实现C实现python实现 开运算(Opening Operation)闭运算(Closing Ope…

chatgpt赋能Python-python_dilate

Python中的dilate操作:了解该操作及其应用 在计算机视觉领域,dilate操作是一种常用的图像处理技术。在Python中,我们可以使用OpenCV库来实现dilate操作。本文将介绍dilate操作的基本概念,讨论其应用及如何使用Python进行实现。 …

OPenCV膨胀函数dilate()的使用

OPenCV版本:4.4 IDE:VS2017 功能描述 简述:使用一个指定的核元素去膨胀一个图像,图像膨胀的过程类似于一个卷积的过程,源图像矩阵A以及结构元素B,B在A矩阵上依次移动,每个位置上B所覆盖元素的最…

OpenCV每日函数 图像过滤模块 (5) dilate膨胀函数

一、概述 通过使用特定的结构元素来扩大图像。该函数使用指定的结构元素扩展源图像,该结构元素确定取最大值的像素邻域的形状: 膨胀可以应用数次(迭代)。 在多通道图像的情况下,每个通道都是独立处理的。 膨胀: 腐蚀: 二、dilate函数 1、函数原型 cv::dilate…

生产环境屏蔽swagger

只需要在swagger的配置类上增加Profile( )注解,指定环境变量,即可屏蔽生产环境上的swagger,如下: 先使用dev环境,访问swagger,结果如下: 再使用test环境,访问swagger,结果…

生产环境解决跨域

1.先决条件是在开发环境中使用的是代理。 2然后在生产环境当中,增加一个proxy代理; (1)先下载:cnpm install http-proxy-middleware -D (2)引入: (3)使用&am…

linux环境下编译部署php生产环境

linux环境下编译部署php生产环境 版本控制 php:7.2.4 nginx:1.9.9 部分插件版本 xlswriter:1.3.3.2 redis:3.1.3 一、安装php 1.安装依赖(之后安装缺少的依赖都可以用yum安装) yum install -y gcc gcc-c make zlib zlib-devel pcre pcre…

用 source map 调试生产环境

当我们的应用程序部署到生产环境时,我们发现它与我们在开发环境时的代码不同。我们的代码在构建过程中会以各种方式进行修改和优化。 TypeScript 被转译、压缩。生成的 JavaScript 包尽可能小并且能够在浏览器中正常运行。 所有这些步骤都很有效率,它们…

uniapp 小程序 开发环境和生产环境

uni开发小程序 运行到开发工具 再上传 process.env.NODE_ENV 获取的值是development 一直是开发环境 用uni发行 上传到微信公众平台是生成环境 在 HBuilderX 中,点击“运行”编译出来的代码是开发环境,点击“发行”编译出来的代码是生产环境 let url;if …

Vue cli3配置生产环境,开发环境,和测试环境

目录1、先在package.json文件中添加: 2、在项目目录下建立 .env文件和.env.test文件 3、配置api变量 3.1、配置axios的baseURL路径 3.2、自己拼接的路径 4、.env知识点补充 4.1,关于文件名:必须以如下方式命名,不要…

31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)

参考链接: Spring官网 Spring官网 外部配置加载顺序的说明 SpringBoot多环境的切换(生产环境、开发环境、测试环境)_周太阳的博客-CSDN博客_springboot测试生产环境切换 java maven 测试生产环境配置_SpringBoot生产环境和测试环境配置分离的教程详解_落云歌语文…

生产环境关闭 swagger

#生产环境需要关闭 swagger 防止接口暴露 1,启动判断写在相应的环境配置文件中,根据条件判断是否启动 swagger : 添加配置项:swagger.is.enable #是否激活 swagger true or false swagger.is.enabletrue2,代码取值&a…

前端工程师生产环境 debugger 技巧

关注公众号 前端开发博客,领27本电子书 回复加群,自助秒进前端群 导言 开发环境 debug 是每个程序员上岗的必备技能。生产环境呢?虽然生产环境 debug 是一件非常不优雅的行为,但是由于种种原因,我们又不得不这么干。 那…

【微信小程序 | 实战开发】开发环境、测试环境和生产环境

写在前面: 你是否想要掌握人工智能的最新技术和应用?你是否想要成为未来社会的创新者和领导者?你是否想要和全球的优秀导师和同学一起学习和交流?如果你的答案是肯定的,那么欢迎来到床长人工智能教程网站,这…

Nginx生产环境平滑升级

一.背景 最近遇到一个比较尴尬而又实际的问题,那就是我们生产环境使用的Nginx是Centos6的老古董。业务需求需要加载Nginx的一个模块来实现,但是版本太老了,需要Nginx1.18之后才能支持,而我们的是Nginx1.12。 那升级Nginx是我们要做…

生产环境和开发环境_环境部署:开发、测试和线上环境的区别

点击蓝字 关注我们 软件开发环境(Software Development Environment,SDE)是指在基本硬件和宿主软件的基础上,为支持系统软件和应用软件的工程化开发和维护而使用的一组软件,简称SDE。它由软件工具和环境集成机制构成,前者用以支持软件开发的相关过程、活动和任务,后者…