形态学操作之膨胀与腐蚀
文章目录
- 1. 形态学
- 2. 腐蚀 - 黑进白退
- 3. 膨胀 - 白进黑退
- 4. 开/闭运算
- 5. 其它形态学操作
1. 形态学
形态学操作是根据图像形状进行的简单操作。一般情况下对二值化图像/灰度图像进行操作。它需要输入两个操作,一个是原始图像,另一个被称为结构化元素或核,它是用来决定操作的性质的。两个基本的形态学操作是腐蚀和膨胀,它们的变体构成了开运算、闭运算和梯度等。简言之,形态学操作其实就是改变物体的形状,比如腐蚀就是"变瘦",膨胀就是"变胖",注意腐蚀和膨胀是针对图片中的白色部分。效果展示如下图:
2. 腐蚀 - 黑进白退
腐蚀的效果是把图片"变瘦",其原理是在原图的小区域内取局部最小值。因为是二值化图,只有 0 和 255,所以小区域内有一个是 0 该像素点就为 0:
OpenCV 中用cv2.erode()
函数进行腐蚀,只需要指定核的大小即可:
img = cv2.imread('j.bmp', 0)
kernel = np.ones((5, 5), np.uint8)
erosion = cv2.erode(img, kernel)
这个核也叫结构元素,因为形态学操作其实也是应用卷积来实现的。结构元素可以是矩形/椭圆/十字形,可以用cv2.getStructuringElement()
来生成不同形状的结构元素,比如:
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 矩形结构
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) # 椭圆结构
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5)) # 十字形结构
3. 膨胀 - 白进黑退
膨胀与腐蚀相反,取的是局部最大值,效果是把图片"变胖"。OpenCV 中用cv2.dilate()
函数进行腐蚀,只需要指定核的大小即可:
dilation = cv2.dilate(img, kernel)
4. 开/闭运算
开运算:先腐蚀后膨胀,可用以消除黑色背景中的白点杂质,如下图左边所示。该操作用cv2.morphologyEx()
函数实现。
img = cv2.imread('j_noise_out.bmp', 0)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
闭运算:先膨胀后腐蚀,可用以消除白色前景中的黑点杂质,如下图右边所示。该操作用cv2.morphologyEx()
函数实现。
img = cv2.imread('j_noise_out.bmp', 0)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
5. 其它形态学操作
形态学梯度:膨胀图减去腐蚀图 (dilation - erosion),得到物体轮廓。
- 基本梯度:基本梯度是用膨胀后的图像减去腐蚀后的图像得到差值图像,成为梯度图像。也是 opencv 中支持的计算形态学梯度的方法,而此方法得到的梯度又被成为基本梯度。
- 内部梯度:用原图像减去腐蚀后的图像得到的差值图像,称为图像的内部梯度。
- 外部梯度:原图像膨胀后减去原图像得到的差值图像,称为图像的外部梯度。
img = cv2.imread('school.bmp', 0)
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
顶帽:原图减去开运算后的图 (src - opening)。
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
黑帽:闭运算后的图减去原图 (closing - src)。
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
【参考】
- 腐蚀/膨胀操作参考代码;
- 【python-opencv】形态学操作-腐蚀与膨胀;
- 腐蚀与膨胀 - 基础篇 – OpenCV-Python 教程;
- OpenCV-Python教程:形态学变换~腐蚀和膨胀(erode,dilate);
形态学操作之膨胀与腐蚀相关推荐
- [转]形态学操作:膨胀与腐蚀
形态学操作其实就是改变物体的形状,比如腐蚀就是"变瘦",膨胀就是"变胖",看下图就明白了: 形态学操作一般作用于二值化图,来连接相邻的元素或分离成独立的元素.腐 ...
- 形态学操作:膨胀与腐蚀
形态学操作其实就是改变物体的形状,比如腐蚀就是"变瘦",膨胀就是"变胖",看下图就明白了: 形态学操作一般作用于二值化图,来连接相邻的元素或分离成独立的元素.腐 ...
- OpenCvSharp 形态学操作(膨胀、腐蚀)
什么是形态学操作 用数学形态学(也称图像代数)表示以形态为基础对图像进行分析的数学工具.基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的. 形态学图像处理的数 ...
- 形态学处理:膨胀、腐蚀、开运算、闭运算、形态学梯度、顶帽、黑帽
形态学处理 一 膨胀 二 腐蚀 三 开运算 四 闭运算 五 形态学梯度 六 顶帽 七 黑帽 形态学处理 一 膨胀 代码: #include <opencv2/core/core.hpp> ...
- 【youcans 的 OpenCV 例程200篇】114. 形态学操作之膨胀
欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程 2 ...
- 详解图像形态学操作之图形的腐蚀和膨胀的概念和运算过程,并利用OpenCV的函数erode()和函数dilate()对图像进行腐蚀和膨胀操作
图像形态学中两种最基本的操作就是对图形的腐蚀和膨胀,可以说,形态学中的中高级操作都是建立在这两种操作之上.通过这两种基本的运算可以去除图像中的噪声,分割出独立的区域或者将两个区域连接在一起. 关于图像 ...
- OpenCV探索之路——图像形态学处理(膨胀、腐蚀、开运算、闭运算)
腐蚀和膨胀是最基本的形态学运算. 腐蚀和膨胀是针对白色部分(高亮部分)而言的. 膨胀就是对图像高亮部分进行"领域扩张",效果图拥有比原图更大的高亮区域:腐蚀是原图中的高亮区域被蚕食 ...
- CUDA精进之路(二):图像处理——形态学滤波(膨胀、腐蚀、开闭运算)
引言 从这篇文章起,开始将一些较为典型的OpenCV算法通过CUDA进行实现,本文实现的为图像处理中最为常见的形态学腐蚀以及膨胀,由于本文目的在于算法移植后的验证,故在图片的选择上用小图像作为输入的示 ...
- OpenCV精进之路(三):图像处理——形态学滤波(膨胀、腐蚀、开闭运算)
前言 腐蚀和膨胀是最基本的形态学运算. 腐蚀和膨胀是针对白色部分(高亮部分)而言的. 膨胀就是对图像高亮部分进行"领域扩张",效果图拥有比原图更大的高亮区域:腐蚀是原图中的高亮区域 ...
最新文章
- 信号编程之sigaction函数和sigqueue函数
- ma应用、超级短线、分钟短线买卖和看盘心得
- 介绍一个国外的分类网站Egouz
- No relevant classes found. No output generated、metaObject连接错误
- 基于Android平台淘宝网手机客户端实战开发(共四季,涉及各类技术应用)
- 别人都说我老公的字写的不错,大家帮我看看这字行不?
- C++/C代码审查表
- 荣获2009年“微软最有影响力开发者”称号
- C++1.1 #include<iostream>
- 学习笔记1:迟滞电压比较器
- JAVA基础之单例模式
- 程序员转行可以做什么?
- MFC 中PreTranslateMessage(MSG* pMsg)截获按钮和编辑框的消息进行预处理
- 【Android】安卓开发实战之软键盘设置
- 边策划边制作的游戏开发日志(一) 用Untiy制作类似《莱莎的炼金工坊》移动和视角系统(第三人称控制系统)
- Centos下安装SSH、FTP服务
- NeRF 源码分析解读(一)
- 拼多多2018校招内推编程题汇总 详解
- 你不知道的微信小程序-李宁-专题视频课程
- android otg连接单反