python-opencv之形态学操作(腐蚀和膨胀)原理详解

2023-11-12

形态学操作作用

  1. Removing noise.
  2. Isolation of individual elements and joining disparate elements in an image.
  3. Finding of intensity bumps or holes in an image.

最基本的形态操作是侵蚀和扩张。让我们更详细地了解这些操作。

Erosion 腐蚀

原理

它会侵蚀前景物体的边界,并从图像中移除小规模的细节,但同时会减少感兴趣区域的大小。

在该操作中,对图像中任意形状的奇数大小的卷积核进行卷积,如果核下的所有像素都为1,则认为原始图像中的像素(1或0)为1,否则将其侵蚀,即使其为零。

因此,根据内核的大小,所有靠近边界的像素都将被丢弃。因此前景物体的厚度或大小减小或者图像中的白色区域减小。

该方法适用于去除小的白噪声和分离两个连通的物体。

基本上,它计算给定核区域上的局部最小值。前景物体的厚度或大小会减少换句话说,图像中的白色区域会减少。

函数原型

cv2.erode(src, kernel, dst,anchor,iterations,borderType,borderValue)
src: 输入的图像

kernel: 用于腐蚀的结构元件如果element = Mat(),则使用3 × 3的矩形结构单元。内核可以使用getStructuringElement创建。

dst: 它是与src相同大小和类型的输出图像。

anchor: 它是一个整数类型的变量,表示锚点,它的默认值point是(-1,-1),这意味着锚点位于内核中心。

borderType: 是否应用边框,指定边框类型

iterations: 应用腐蚀的迭代次数

borderValue: 如果是constant边框类型,需要指定一个值

Return Value: 返回一个图像

实例

#腐蚀操作
import cv2
import matplotlib.pyplot as plt
import numpy as np

img =cv2.imread("./cycle.png",cv2.IMREAD_COLOR)
cv2.imshow("cycle",img)

kernel = np.ones((5,5),np.uint8)              #设置kenenel大小
erosion_1 = cv2.erode(img,kernel,iterations=2)
erosion_2 = cv2.erode(img,kernel,iterations=3)
erosion_3 = cv2.erode(img,kernel,iterations=4)
res = np.hstack((erosion_1,erosion_2,erosion_3)) # 参数的传入为tuple
cv2.imshow("res",res)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果显示

原图
在这里插入图片描述
结果
在这里插入图片描述

Dilation(膨胀)

原理

膨胀操作通常使用一种构造元素来探测和扩展输入图像中包含的形状。这种作用与侵蚀相反
在此操作中,对图像中任意形状的奇数大小的卷积核进行卷积,如果核下至少有一个像素为1,则该像素元素为1。

所以它增加了图像中的白色区域或者前景物体的大小增加了。

为了去除噪声,侵蚀之后是膨胀。因为,侵蚀会去除白噪声,但也会缩小我们的物体。所以我们把它扩张。因为噪音消失了,它们不会再回来,但我们的目标面积增加了。

它在连接对象的破碎部分时也很有用。

函数原型

cv2.dilate(src, kernel, dst,anchor,iterations,borderType,borderValue)
src: 输入的图像

kernel: 用于膨胀的结构元件如果element = Mat(),则使用3 × 3的矩形结构单元。内核可以使用getStructuringElement创建。

dst: 它是与src相同大小和类型的输出图像。

anchor: 它是一个整数类型的变量,表示锚点,它的默认值point是(-1,-1),这意味着锚点位于内核中心。

borderType: 是否应用边框,指定边框类型

iterations: 应用膨胀的迭代次数

borderValue: 如果是constant边框类型,需要指定一个值

Return Value: 返回一个图像

实例

#腐蚀还原
import cv2
import matplotlib.pyplot as plt
import numpy as np

img =cv2.imread("./cycle.png",cv2.IMREAD_COLOR)
cv2.imshow("cycle",img)

kernel = np.ones((5,5),np.uint8)              #设置kenenel大小
erosion = cv2.erode(img,kernel,iterations=3)  # 腐蚀去除白噪点
cv2.imshow("erosion",erosion)
dilate = cv2.dilate(erosion,kernel,iterations=3) # 膨胀还原图形
cv2.imshow("dilate",dilate)

#res = np.hstack((erosion_1,erosion_2,erosion_3)) # 参数的传入为tuple

cv2.waitKey(0)
cv2.destroyAllWindows()

结果展示

原图
在这里插入图片描述
腐蚀后
在这里插入图片描述
膨胀还原后
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python-opencv之形态学操作(腐蚀和膨胀)原理详解 的相关文章

随机推荐

  • STM32CubeMX时钟源的选择

    使用STM32CubeMX进行时钟源RCC配置的时候 可以选择使用内部时钟或外部时钟 当程序对时钟精度要求较高时 通常使用外部时钟 下拉选框如下图 Disable 禁用外部时钟 BYPASS Clock Resource 外部有源晶振 旁路
  • 在windows上使用ubuntu(非虚拟机模式)

    工具 wsl ubuntu20 04 步骤 在powershell下执行wsl install等待进度条完成 在控制面板 gt 程序 gt 启用或者关闭windos功能 勾选适用于Linux的windos子系统 任务栏的搜索框输入Micro
  • python实验总结_python实训总结和体会_python实训心得体会 - CSDN

    1 字符串格式化表达式 功能 生成一个特定格式的字符串运算符 语法格式 格式化字符串 参数值或格式化字符串 参数值1 参数值2 参数值3 描述 左边是字符串的格式 右边是参数值 当有多个参数值 使用括号 分离格式字符串并使用一个逗号 分隔格
  • MySQL删除数据库

    删除数据库是指在数据库系统中删除已经存在的数据库 数据库删除之后 原来分配的空间将被收回 需要注意的是 数据库删除之后该数据库中所有的表和数据都将被删除 因此删除数据库要特别小心 一 通过SQL语句 MySQL中 删除数据库通过SQL语句D
  • tensorflow学习(二)——训练分类时,对图像进行增强(基于tf.image存在的一些问题)

    0 写作目的 好记性不如烂笔头 1 图像分类时 图像的数据增强 在博主进行图像增强时 存在一些问题 和大家分享一下 1 1 使用tensorflow自带的读取图像函数存在的问题 如果采用直接读取图像的方式 使用tf image进行读取图像
  • zookeeper介绍

    1 简介 Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目 它主要是用来解决分布式应用中经常遇到的一些数据管理问题 如 统一命名服务 状态同步服务 集群管理 分布式应用配置项的管理等 Zookeeper 作为一个
  • Spring-Data-Jpa AuditingEntityListener @CreatedDate @LastModifiedDate 用法

    import com fasterxml jackson annotation JsonIgnoreProperties import org hibernate validator constraints NotBlank import
  • OpenStack学习笔记(二)计算服务NOVA

    本篇记录OpenStack的计算服务NOVA一些内容 很多看不懂 汗 只捡一小部分记录 一 逻辑图 OpenStack 计算服务NOVA 是基础设施服务IAAS的主要部分 采用Python实现 1 因为认证 与OpenStack 身份认证k
  • 如何将GB7714-2015格式的参考文献表转换为bib文件

    如何将GB7714 2015格式的参考文献表转换为bib文件 1 背景 latex使用参考文献是一个自动化的工作 但建立和维护bib文件其实一个长期的积累活动 有些参考文献的bibtex数据是存在 比如从各类学术网站上可以下载到 但有些网站
  • NIO-DO Java 线上笔试(编程)题,蔚来汽车

    NIO DO Java 线上笔试 编程 题 1 使用二分查找的方式来定位某一元素 2 请用你熟悉的开发语言 完成如下题目 输入 若干个集合 各集合中的元素不会重复 输出 求这些集合的笛卡尔积例如 输入 N个集合 这里N 3 a b x y
  • Laravel-Dcat-layer 手写的弹窗样式

    Dcat admin框架下重新写的弹窗样式 实现设置固定最大高度弹窗滚动 实现更好的页面效果 public function layer return lt lt
  • python使用KDDockWidget

    编译原理 KDDockWidget是一个C 库 通过shiboken转成python的绑定支持 针对特殊版本 需要在cmake文件中增加一些变量 注 本次编译 Qt版本统一指定为6 4 2 库支持Qt gt 5 12或6 2 0以上版本 下
  • yolov5数据集制作

    yolov5 数据集的格式 每个图像的标注信息存储在一个独立的txt文件中 每个txt文件的名称应该与其对应的图像名称相同 只是文件扩展名不同 例如 对于名为 image1 jpg 的图像 其标注信息应存储在名为 image1 txt 的t
  • FPGA微型板Verilog简单音频

    简单音调生成 该模块通过使用一个计数器生成一个1 kHz的信号 该计数器在CLK的每个刻度上都递增 当计数器达到32 000时 将切换输出BUZZER 并将计数器重置为0 音频输出 使用一个1 k 电阻器和一小段实心线将GPIO引脚P97和
  • Nginx多条件IF逻辑运算(与、或操作)不支持问题解决方法

    原文地址 Nginx多条件IF逻辑运算 与 或操作 不支持问题 BIGTREE Nginx配置不支持if条件的逻辑与 逻辑或运算 而且也不支持if嵌套 例如 if e request filename request uri apple b
  • 5 建立业务需求

    业务需求代表的是需求链的顶部 它们定义解决方案的愿景和实现该方案的项目范围 用户需求和功能需求和功能需求必须与业务需求建立的背景和目标保持一致 任何无助于项目达成业务目标的需求都不宜实现 如果项目没有清晰的定义和充分沟通方向 肯定会带来灾难
  • IDEA配置tomcat服务器

    需求背景 从Eclipse转IDEA后面对的第一个问题 就是要为IDEA配置tomcat服务 否则不可用 那么 功能需求 那么 该如何配置呢 1 点击 Edit Configurations 进入tomcat服务编辑页面 如下图所示 2 点
  • 漫谈数据库表设计及索引设计

    一 数据库表设计 在数据库表设计上有个很重要的设计准则 称为范式设计 什么是范式设计 范式来自英文Normal Form 简称NF MySQL是关系型数据库 但是要想设计 个好的关系 必须使关系满足一定的约束条件 此约束已经形成了规范 分成
  • 一阶RC低通滤波器(二)

    这篇文章补充下前面讲的一阶低通滤波器 在母线电压采样或是在电机的三相端电压采样时 往往是先分压 再经过RC低通滤波器 电路图如下 1 先求输出和输入的关系 Uao Ua 从上式可以看出系统相当于一个典型的一阶低通滤波器串联了一个R2 R1
  • python-opencv之形态学操作(腐蚀和膨胀)原理详解

    形态学操作作用 Removing noise Isolation of individual elements and joining disparate elements in an image Finding of intensity