Python实例解析图像形态学运算技术
作者:Mr.Winter` 发布时间:2021-04-14 10:34:24
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);
膨胀出来的小猫就显得轻松很多,感觉升华了。
今后要是想有一张照片创造光与影
、正与邪
、天使与恶魔
两种反差,可以考虑采用图像腐蚀和膨胀操作。
来源:https://blog.csdn.net/FRIGIDWINTER/article/details/123439545
猜你喜欢
- 一、Celery介绍和基本使用 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如
- Js代码:/*** 验证码*/function yzm(){var codeChars = new Array(0, 1, 2, 3, 4,
- Python 添加类型标注Python 如此简洁,书写者在声明变量时甚至无需考虑类型。但是简洁与复杂间,是存在一个平衡点的。当我们书写较为复
- 在一次ASP程序中不能正常连接MSSQL出现出错信息如下:以下为引用的内容:HTTP/1.1 200 OK S
- 最近在做一个领券功能的时候,发现在一定并发下会出现重复领券的问题。使用度娘一顿搜索操作之后,发现可以使用分布式锁来解决这个问题。什么是分布式
- 目录一、列表求并集1. union_by二、列表求交集1. intersection_by三、列表求差集1. difference2. di
- 话不多说直接上代码封装连接@staticmethod def connect(ip, server_user, server_p
- slice:eg:>>>e=[0,1,2,3,4,5,6]>>>s=slice(2,3)>>
- 在域环境下我没配置成果,也许是域用户的原因,因为我在生产环境下搞的,更改域用户需要重启SQLServer ,所以这个方法放弃了,只能用证书形
- 运行效果完整代码from tkinter import *from tkinter.filedialog import *from tkin
- 批量修改linux服务器密码,同时生成execl表格#!/usr/bin/env python#coding:utf8#随机生成自定义长度密
- 最近刚好在学习python+scrapy的爬虫技术,因为mac是自带python2.7的,所以安装3.5版本有两种方法,一种是升级,一种是额
- 一、工具python3第三方类库requestspython3-pyqt5(GUI依赖,不用GUI可不装)ubuntu系列系统使用以下命令安
- Python json 错误xx is not JSON serializable解决办法在使用json的时候经常会遇到xxx
- 系统环境:VC6 + Python-2.5.41、下载Python-2.5.4源码。2、解压,打开D:\Python-2.5.4\PC\VC
- 按单字节计算字符串的长度,汉字算两个字节。<script type="text/JavaScript"
- python函数的参数类型和返回类型默认为int。如果需要传递一个float值给dll,那么需要指定参数的类型。如果需要返回一个flaot值
- 如下所示:# 选取等于某些值的行记录 用 == df.loc[df['column_name'] == some_value
- 1. str.format():使用“{}”占位符格式化字符串(占位符中的索引号形式和键值对形式可以混合使用)。>>> s
- ChatGPT 是 OpenAI 开发的 GPT(Generative Pre-trained Transformer)语言模型的变体。它是