Python实例解析图像形态学运算技术

1 图像形态学运算

在Python OpenCV图像处理之图像滤波特效详解中我们将图像滤波进行了以下分类:

邻域滤波

  • 线性滤波
  • 非线性滤波

频域滤波

  • 低通滤波
  • 高通滤波

在非线性滤波中,之前只介绍了中值滤波,事实上,还有一类非常常用的非线性滤波方法,称为图像形态学运算(Morphological operations)。

图像形态学运算是一类基于图像形状运算的非线性滤波技术,其基本思想是利用一些特殊的结构元来测量或提取图像中相应的形状和特征,以便进一步进行图像分析和处理。这里结构元素就相当于我们在滤波中所涉及到的模板——一个给定像素的矩阵,这个矩阵形状可以任意,但一般是正方形。

接下来,我们分析一下几种经典的图像形态学运算算法,再编程测试一下~

2 腐蚀

腐蚀就是用局部灰度最小值代替目标像素值实现对高亮区域的腐蚀。

举个例子,有这样一张图像和这样一个结构元素,其中结构元素的蓝色方块表示的是模板原点。

下面我们开始遍历这张图像,到下图这个位置的时候,模板内灰度最小值是灰色方格的像素,因此替换掉模板原点中蓝色方格处的像素为灰色(原本为白色,被腐蚀了)

就这样遍历完这张图像得到

3 膨胀

膨胀就是用局部灰度最大值代替目标像素值实现对高亮区域的膨胀。

和腐蚀类似,遍历这张图像,到下图这个位置的时候,模板内灰度最大值是白色方格的像素,因此替换掉模板原点中蓝色方格处的像素为白色(原本为灰色,膨胀了)

就这样遍历完这张图像得到膨胀的最终结果为

上个实物图感受下腐蚀和膨胀的效果

4 开运算与闭运算

理解了图像腐蚀与膨胀,那么开闭运算就很容易了

  • 开运算(Opening):先腐蚀再膨胀
  • 闭运算(Closing):先膨胀再腐蚀

开运算能够除有效去除孤立点、毛刺和小桥;闭运算能够填平小孔,弥合缝隙。

上图假设灰色区域为高亮。

5 顶帽运算与底帽运算

顶帽运算与底帽运算是用于表征开闭运算与原图像间差异的运算,类似边缘检测的梯度差

  • 图像顶帽运算:表征原图像与开运算得到的图像之间的区别
  • 图像底帽运算:表征原图像与闭运算得到的图像之间的区别

6 恶魔与天使

先看看原图,一对可爱的猫咪

进行腐蚀操作,首先创建结构元

int eSize = 3;  //结构元尺寸
int s = eSize * 2 + 1;
Mat structureElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1)); 

接着用结构元遍历原图,OpenCV有封装好的API,直接调用即可

erode(src, dst, structureElement);
imshow("腐蚀操作后:", dst);

得到腐蚀后的图像如下所示,眼睛空洞洞的,有点恐怖片内味了,这还是原来那两只猫吗?

膨胀操作类似于腐蚀,也有OpenCV封装好的API

dilate(srcImg, dstImg, structureElement, Point(-1, -1), 1);
imshow("膨胀操作后:", dstImg);

膨胀出来的小猫就显得轻松很多,感觉升华了。

今后要是想有一张照片创造光与影正与邪天使与恶魔两种反差,可以考虑采用图像腐蚀和膨胀操作。

到此这篇关于Python实例解析图像形态学运算技术的文章就介绍到这了,更多相关Python 图像形态学运算内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python OpenCV学习之图像形态学

    目录 背景 一.图像二值化 二.自适应阈值 三.腐蚀 四.卷积核获取 五.膨胀 六.开运算 七.闭运算 八.形态学梯度 九.顶帽运算 十.黑帽运算 总结 背景 形态学处理方法是基于对二进制图像进行处理的,卷积核决定图像处理后的效果:形态学的处理哦本质上相当于对图像做前处理,提取出有用的特征,以便后续的目标识别等任务: 一.图像二值化 定义:将图像的每个像素变成两种值,如0和255: 全局二值化的函数原型: threshold(img,thresh,maxVal,type) img:最好是灰度图像

  • Python实例解析图像形态学运算技术

    1 图像形态学运算 在Python OpenCV图像处理之图像滤波特效详解中我们将图像滤波进行了以下分类: 邻域滤波 线性滤波 非线性滤波 频域滤波 低通滤波 高通滤波 在非线性滤波中,之前只介绍了中值滤波,事实上,还有一类非常常用的非线性滤波方法,称为图像形态学运算(Morphological operations). 图像形态学运算是一类基于图像形状运算的非线性滤波技术,其基本思想是利用一些特殊的结构元来测量或提取图像中相应的形状和特征,以便进一步进行图像分析和处理.这里结构元素就相当于我们

  • 详解Python图像形态学处理(开运算,闭运算,梯度运算)

    目录 一.图像开运算 二.图像闭运算 三.图像梯度运算 四.总结 这篇文章将继续介绍开运算.闭运算和梯度运算.数学形态学(Mathematical Morphology)是一种应用于图像处理和模式识别领域的新方法.数学形态学(也称图像代数)表示以形态为基础对图像进行分析的数学工具,其基本思想是用具有一定形态的结构元素去量度和提取图像中对应形状以达到对图像分析和识别的目的. 一.图像开运算 开运算一般能平滑图像的轮廓,削弱狭窄部分,去掉较细的突出.闭运算也是平滑图像的轮廓,与开运算相反,它一般熔合

  • Python三元运算与lambda表达式实例解析

    这篇文章主要介绍了Python三元运算与lambda表达式实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 三元运算是if...else...的简化版,lambda表达式是函数的简化版 三元运算(三目运算) # 判断两个数中的较大者 fun(a1,a2): return a1 if a1>a2 else a2 v = fun(5,2) print (v) # v = 5 lambda运算(一行运算符) #规范 lambda 参数1,参数2

  • Python list运算操作代码实例解析

    这篇文章主要介绍了Python list运算操作代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在操作list的时候,经常用到对列表的操作运算,比如说,列表添加,删除操作,其实,这里面经常回遇到这样一个问题,就是列表的操作容易被混淆了. 有人做了一个总结,这个很清晰,我就不多做阐述了: 1.append() 向列表尾部追加一个新元素,列表只占一个索引位,在原有列表上增加 2.extend() 向列表尾部追加一个列表,将列表中的每个元

  • Python 网页解析HTMLParse的实例详解

    Python 网页解析HTMLParse的实例详解 使用python将网页抓取下来之后,下一步我们就应该解析网页,提取我们所需要的内容了,在python里提供了一个简单的解析模块HTMLParser类,使用起来也是比较简单的,解析语法没有用到XPath类似的简洁模式,但新手用起来还是比较容易的,看下面的例子: 现在一个模拟的html文件: <html> <title id='main' mouse='你好'>我是标题</title><body>我是内容<

  • Python用imghdr模块识别图片格式实例解析

    imghdr模块 功能描述:imghdr模块用于识别图片的格式.它通过检测文件的前几个字节,从而判断图片的格式. 唯一一个API imghdr.what(file, h=None) 第一个参数file可以是用rb模式打开的file对象或者表示路径的字符串和PathLike对象.h参数是一段字节串.函数返回表示图片格式的字符串. >>> import imghdr >>> imghdr.what('test.jpg') 'jpeg' 具体的返回值和描述如下: 返回值 描述

  • Python建立Map写Excel表实例解析

    本文主要研究的是用Python语言建立Map写Excel表的相关代码,具体如下. 前言:我们已经能够很熟练的写Excel表相关的脚本了.大致的操作就是,从数据库中取数据,建立Excel模板,然后根据模板建立一个新的Excel表,把数据库中的数据写入.最后发送邮件.之前的一篇记录博客,写的很标准了.这里我们说点遇到的新问题. 我们之前写类似脚本的时候,有个问题没有考虑过,为什么要建立模板然后再写入数据呢?诶-其实也不算是没考虑过,只是懒没有深究罢了.只求快点完成任务... 这里对这个问题进行思考阐

  • Python生成器以及应用实例解析

    本文研究的主要是Python生成器及其应用,具体如下. 一.定义 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的__iter__方法),所以生成器就是可迭代对象 二.生成器的两种形式(Python有两种不同的方式提供生成器) 1.生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果.yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行 yield的功能: 把函数的结果做生迭代器(以一

  • Python scipy的二维图像卷积运算与图像模糊处理操作示例

    本文实例讲述了Python scipy的二维图像卷积运算与图像模糊处理操作.分享给大家供大家参考,具体如下: 二维图像卷积运算 一 代码 import numpy as np from scipy import signal, misc import matplotlib.pyplot as plt image = misc.ascent()#二维图像数组,lena图像 w = np.zeros((50,50))#全0二维数组,卷积核 w[0][0]=1.0#修改参数,调整滤波器 w[49][2

  • Python AES加密实例解析

    本文主要是对aes加密技术做一个简要分析,然后使用Python实现,具体介绍如下. AES,是美国联邦政府采用的一种加密技术,AES有几个模式,其中CBC模式是公认的安全性最好的模式,被TLS所采用. 加密与解密双方需确定好key,key的长度可以是16位,24位,32位中的一个,分别对应了不同的算法. 如果key的长度是是16位的,那么被加密的明文长度必须是16的整数倍,但实际使用中,这么巧的事情很难发生,因此就需要对明文进行填充,最常用的方式就是填充\0,等到解密的时候,再把解密出来的明文右

随机推荐