【Opencv--形态学操作】膨胀、腐蚀、开/闭操作:cv2.morphologyEx、cv2.erode、cv2.dilate

news2024/11/16 13:02:12

【Opencv–形态学操作】膨胀、腐蚀、开/闭操作

文章目录

  • 【Opencv--形态学操作】膨胀、腐蚀、开/闭操作
    • 1. 介绍
    • 2. 形态学操作
      • 2.1 腐蚀和膨胀
        • 2.1.1 腐蚀
        • 2.1.2 膨胀
        • 2.1.3 代码示例
      • 2.2 开/闭操作
        • 2.2.1 开操作
        • 2.2.2 闭操作
        • 2.2.3 代码示例
      • 2.3 礼帽和黑帽
        • 2.3.1 礼帽运算
        • 2.3.2 黑帽运算
        • 2.3.3 函数
    • 3. 总结
    • 4. 参考

1. 介绍

  • 在使用opencv做图像处理的时候,我们经常会需要用到一些基础的图像形态学操作腐蚀、膨胀。通过这些基本的形态学操作我们可以实现去噪以及图像的切割等。
  • 形态学变换是基于图像形状的基础变换,它只能在二值图像上做处理。形态学操作需要两个输入:输入图像和structuring element(kernel),structuring element(kernel)决定我们做何种形态学处理的操作。
  • 腐蚀和膨胀是形态学处理的基础操作,而开/闭运算、礼帽黑帽是基于腐蚀和膨胀的变种操作。

2. 形态学操作

2.1 腐蚀和膨胀

腐蚀和膨胀是最基本的形态学操作,腐蚀和膨胀都是针对白色部分(高亮部分)而言的。

  • 膨胀就是使图像中高亮部分扩张,效果图拥有比原图更大的高亮区域;
  • 腐蚀是原图中的高亮区域被蚕食,效果图拥有比原图更小的高亮区域。
  • 总结就是:膨胀是求局部最大值的操作,腐蚀是求局部最小值的操作。

2.1.1 腐蚀

用一个结构元素扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的对应像素做“与"操 作,如果都为1,则该像素为1,否则为0。如下图所示,结构A被结构B腐蚀后:

在这里插入图片描述

  • 作用:消除物体边界点,使目标缩小,可以消除小于结构元素的噪声点。
  • 函数:cv.erode(img,kernel,iterations)
    参数:
    • img:要处理的图像
    • kernel:核结构(上图结构B)
    • iterations:腐蚀的次数,默认是1。

2.1.2 膨胀

用一个结构元素扫描图像中的每一个像羹,用结构元素中的每一个像素与其覆盖的对应像素做 “与"操作,如果都为0,则该像素为0,否则为1。如下图所示,结构A被结构B膨胀后:
在这里插入图片描述

  • 作用:将与物体接触的所有背景点合并到物体中,使目标增大,可填补目标中的孔洞。
  • 函数:cv.dilate(img,kernel,iterations)
    参数:
    • img:要处理的图像
    • kernel:核结构
    • iterations:腐蚀的次数,默认是1。

2.1.3 代码示例

import numpy as np
import cv2 as cv

img = cv.imread("./img/1.jpg")

# 创建核结构
kernel = np.ones((5,5),np.uint8)

# 腐蚀和膨胀
erosion = cv.erode(img,kernel)  #腐蚀
dilate = cv.dilate(img,kernel)  #膨胀

cv2.imshow('1', img)  # 原图
cv2.imshow('2', erosion)  # 腐蚀后
cv2.imshow('3', dilate)  # 膨胀后

2.2 开/闭操作

开运算和闭运算是将腐蚀和膨胀按照一定的次序进行处理。但这两者并不是可逆的,即先开后闭(先闭后开)并不能得到原来的图像。

2.2.1 开操作

  • 先腐蚀后膨胀。
  • 作用:分离物体,消除小区域。
  • 特点:消除噪点,去除小的干扰块,而不影响原来的图像。

2.2.2 闭操作

  • 先膨胀后腐蚀。
  • 作用:消除"闭合"物体里面的孔洞。
  • 特点:可以填充闭合区域。

2.2.3 代码示例

函数:cv.morphologyEx(img, op, kernel)

  • 参数:
    • img:要处理的图像。
    • op(处理方式):若进行开运算,则设为cv.MORPH_OPEN,若进行闭运算,则设为cv.MORPH_CLOSE
    • Kernel(核结构):按照该核结构(模板)去进行运算,上述的结构B。
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

img = cv.imread("./img/1.jpg")

# 创建核结构
kernel = np.ones((5,5),np.uint8)

#图像的开闭运算
cvOPen = cv.morphologyEx(img,cv.MORPH_OPEN,kernel)  #开运算
cvClose = cv.morphologyEx(img,cv.MORPH_CLOSE,kernel)  #闭运算

#图像展示
fig,axes=plt.subplots(nrows=1,ncols=3,figsize=(15, 10))
axes[0].imshow(img[:,:,::-1]), axes[0].set_title("原图")
axes[1].imshow(cvOPen[:,:,::-1]), axes[1].set_title("开运算")
axes[2].imshow(cvClose[:,:,::-1]), axes[2].set_title("闭运算")
plt.show()

2.3 礼帽和黑帽

2.3.1 礼帽运算

原图像与开运算结果之差,如下式计算:

d s t = t o p h a t ( s r c , e l e m e n t ) = s r c − o p e n ( s r c , e l e m e n t ) dst = tophat(src, element) = src - open(src, element) dst=tophat(src,element)=srcopen(src,element)

由于开运算可能会放大了裂缝或者局部低亮度的区域。

  • 因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,且这一操作和选择的核的大小相关。
  • 礼帽运算用来分离比邻近点亮一些的斑块。当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。

2.3.2 黑帽运算

“闭运算“的结果图与原图像之差,如下式计算:

d s t = b l a c k h a t ( s r c , e l e m e n t ) = c l o s e ( s r c , e l e m e n t ) − s r c dst = blackhat(src, element) = close(src, element) - src dst=blackhat(src,element)=close(src,element)src

黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域,且这一操作和选择的核的大小相关。

黑帽运算可以用来分离比邻近点暗一些的斑块。

2.3.3 函数

cv.morphologyEx(img, op, kernel)

参数:
	img:要处理的图像
	op:处理方式
		闭运算:cv.MORPH_CLOSE
		开运算:cv.MORPH_OPEN
		礼帽运算:cv.MORPH_TOPHAT
		黑帽运算:cv.MORPH_BLACKHAT
	Kernel:核结构

3. 总结

  • 腐蚀和膨胀∶
    • 腐蚀:求局部最大值
    • 膨胀:求局部最小值
  • 开闭运算:
    • 开:先腐蚀后膨胀
    • 闭:先膨胀后腐蚀
  • 礼帽和黑帽:
    • 礼帽:原图像与开运算之差
    • 黑帽:闭运算与原图像之差

4. 参考

【1】https://blog.csdn.net/qq_50620084/article/details/124526983

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/350510.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

恭喜! SelectDB 五位开发者成为 Apache Doris 新晋 PMC 成员和 Committer!

近期,通过 Apache Doris 项目管理委员会的推荐与投票,Apache Doris 社区正式迎来了 2 位新晋 PMC 成员 和 8 位新晋 Committer 的加入。值得关注的是,2 位新晋 PMC 成员均来自 SelectDB,分别是衣国垒(yiguolei&#xf…

【蓝桥杯集训4】双指针专题(6 / 6)

目录 3768. 字符串删减 - 滑动窗口ac 799. 最长连续不重复子序列 - 滑动窗口 800. 数组元素的目标和 - 二分ac 2816. 判断子序列 - 双指针 1238. 日志统计 - 滑动窗口 1240. 完全二叉树的权值 - 双指针 1、前缀和 - 通过了 5/12个数据 2、双指针 3768. 字符串删减 -…

<<Java开发环境配置>>6-SQLyog安装教程

一.SQLyog简介: SQLyog 是一个快速而简洁的图形化管理MySQL数据库的工具,它能够在任何地点有效地管理你的数据库,由业界著名的Webyog公司出品。使用SQLyog可以快速直观地让您从世界的任何角落通过网络来维护远端的MySQL数据库。 二.SQLyog下载: 下载地址…

mySQL服务主从实现

一主一从1.1 环境准备:centos系统服务器2台、 一台用户做Mysql主服务器, 一台用于做Mysql从服务器, 配置好yum源、 防火墙关闭、 各节点时钟服务同步、 各节点之间可以通过主机名互相通信1.2 准备步骤:1)iptables -F &…

多态和可变参数

多态 多态是同一个行为具有不同的表现形式或者形态的能力 👿多态的作用:主要用来实现动态性,提高程序的灵活性和扩展性 🤖故事:大宝-小宝是父子,有一天小宝接到打给大宝的电话,让大宝去喝喜酒,但是大宝不在家,小宝急中生智想到假扮成大宝去参加喜宴,这个…

Unity法线贴图原理理解(为什么存在切线空间?存的值是什么?)

Unity法线贴图原理理解(为什么存在切线空间?存的值是什么?)写在前面1、为什么用法线贴图?2、用什么存法线?3、法线向量为什么存在切线空间?法线贴图存得是什么?4、法线贴图为什么会偏蓝&#xf…

MySQL字段值如何区分大小写

MySQL字段值如何区分大小写 注意:设置的是字段值区分大小写 1. 查询时指定大小写敏感,加关键字‘BINARY’ (1)删表,建表,新增数据 drop table binary_test; CREATE TABLE binary_test (id INT unsigned P…

2023年浙江建筑施工物料提升(建筑特种作业)模拟试题及答案

百分百题库提供特种工(物料提升机)考试试题、特种工(物料提升机)考试预测题、特种工(物料提升机)考试真题、特种工(物料提升机)证考试题库等,提供在线做题刷题,在线模拟考…

Zebec完成BNB Chain以及Near链上协议部署,多链化进程加速

从去年开始,Zebec 就开始以多链的形式来拓展自身的流支付生态,一方面向更多的区块链系统拓展自身流支付协议,即从Solana上向EVM链上对协议与通证等进行迁移与拓展。目前基本完成了在BNB Chain以及Near上的合约部署,且能够在这些EV…

handler解析(4)-Message及Message回收机制

Message中可以携带的信息 Message中可以携带的数据比较丰富,下面对一些常用的数据进行了分析。 /*** 用户定义的消息代码,以便当接受到消息是关于什么的。其中每个Hanler都有自己的命名控件,不用担心会冲突*/ public int what; /*** 如果你…

Mrkdown相关快捷键

Mrkdown相关快捷键欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚…

ChatGPT持续“狂飙“,有这么人工智能吗?

最近,一款新聊天工具ChatGPT火了,可以聊天、写作、编程、翻译,甚至可以质疑和拒绝你的要求。自2022年11月底推出以来,ChatGPT已经成为历史上增长最快的消费者应用程序之一。ChatGPT的狂飙突进引来谷歌、百度等众多互联网巨头的跟进…

案例分享 | 某券商利用AI技术进行告警关联分析(下)

本内容来自公众号“布博士”------(擎创科技资深产品专家)在上期内容中,我们了解到跨行业数据挖掘标准流程包括6大过程,分别为业务理解(Business Understanding)、数据理解(Data Understanding&…

JavaWeb3-线程的3种创建方式7种写法

目录 1.方式一:继承Thread(2种写法) 写法①(常规): a.使用jconsole观察线程 b.启动线程——start方法 PS:(常见面试题)start 方法与 run 方法的区别: 写…

免费CRM客户管理系统真的存在吗?不仅有,还有5个!

免费CRM客户管理系统真的存在吗?当然有! 说到CRM客户管理系统,相信很多企业并不陌生,是因为CRM客户管理系统已经成为大多数企业最不可或缺的工具。但是对于很多小微企业和个人用户来说,购买和实施CRM的成本仍然难以承…

上海亚商投顾:沪指午后放量跳水两市上涨个股不足500只

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。市场情绪指数早间震荡走高,沪指盘中收复3300点,午后集体跳水,创业板指一度跌超2%。ChatGP…

Spring 系列之 MVC

Spring 系列文章目录 文章目录Spring 系列文章目录前言一、介绍二、项目搭建1.创建空项目2.设置maven和lombok3.创建maven web module4. 配置Tomcat启动运行项目(选择local本地)5. 导入jar依赖包6.在web.xml中配置DispatcherServlet7. 加入SpringMVC的配…

第六章——抽样分布

文章目录1、统计量的定义2、常用的统计量3、经验分布函数4、正态总体常用统计量的分布4.1、卡方分布4.1.1、卡方分布的定义4.1.2、卡方分布的性质4.2、t分布4.2.1、t分布的定义4.2.2、t分布的性质4.3、F分布4.3.1、F分布的定义4.3.2、F分布的性质5、正态总体的样本均值与样本方…

Hexo搭建个人博客流程全记录

建站缘由 有些东西过不了审,不方便给他人查看,于是就利用Hexo框架搭建了一个个人博客,部署在Github上,取名为“zstar的安全屋”。 链接:http://xdxsb.top 安装Git Bash 无需多言,下载链接:ht…

全网招募P图高手!阿里巴巴持续训练鉴假AI

P过的证件如何鉴定为真?三千万网友都晒出了与梅西的合影?图像编辑技术的普及让人人都能P图,但也带来“假图”识别难题,甚至是欺诈问题。 为此,阿里安全联合华中科技大学国家防伪工程中心、国际文档分析识别方向的唯一顶…