opencv python 图像形态学操作/图像腐蚀/图像膨胀/开运算/闭运算/顶帽/黑帽
Morphological Transformations
1图像腐蚀
腐蚀的基本思想:侵蚀前景物体的边界(总是试图保持前景为白色);内核在图像中滑动(如在2D卷积中).只有当内核下的所有像素都是1时,原始图像中的像素(1或0)才会被认为是1,否则它会被侵蚀(变为零).
边界附近的所有像素都将被丢弃,具体取决于内核的大小.因此,前景对象的厚度或大小减小,或者图像中的白色区域减小.
它有助于消除小的白噪声,分离两个连接的对象
原图:
代码:
import cv2
import numpy as npimg = cv2.imread('img7.png',0)kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(img,kernel,iterations = 1)cv2.imshow('src',img)
cv2.imshow('show',erosion)
cv2.waitKey()
效果图:
2膨胀
它恰好与侵蚀相反。 这里,如果内核下的至少一个像素为“1”,则像素元素为“1”. 因此它增加了图像中的白色区域或前景对象的大小增加.
通常,在去除噪音的情况下,腐蚀之后是膨胀.因为,侵蚀会消除白噪声,但它也会缩小我们的物体,所以我们膨胀它,由于噪音消失了,它们不会再回来,则我们的物体区域会增加。 它也可用于连接对象的破碎部分.
代码:
import cv2
import numpy as npimg = cv2.imread('img7.png',0)kernel = np.ones((5,5),np.uint8)
dilation = cv2.dilate(img,kernel,iterations = 1)cv2.imshow('src',img)
cv2.imshow('show',dilation)
cv2.waitKey()
3开运算
cv2.morphologyEx()
:先腐蚀再膨胀,有助于消除噪音.
代码:
import cv2
import numpy as np
import matplotlib.pylab as pltimg = cv2.imread('img8.png',0)kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)cv2.imshow('src',img)
cv2.imshow('show',opening)
cv2.waitKey()
4闭运算
先膨胀后腐蚀,用于消除前景对象内的小孔或对象上的小黑点.
代码:
import cv2
import numpy as npimg = cv2.imread('img9.png',0)kernel = np.ones((5,5),np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)cv2.imshow('src',img)
cv2.imshow('show',closing)
cv2.waitKey()
5形态学梯度
图像的膨胀和腐蚀之间的差异,结果看起来像目标的轮廓
代码:
import cv2
import numpy as npimg = cv2.imread('img7.png',0)kernel = np.ones((5,5),np.uint8)
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)cv2.imshow('src',img)
cv2.imshow('show',gradient)
cv2.waitKey()
6顶帽(Top Hat)
原图像与开运算图的区别,突出原图像中比周围亮的区域
代码:
import cv2
import numpy as npimg = cv2.imread('img7.png',0)kernel = np.ones((5,5),np.uint8)
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)cv2.imshow('src',img)
cv2.imshow('show',tophat)
cv2.waitKey()
7黑帽(Black Hat)
闭运算图 - 原图像,突出原图像中比周围暗的区域
代码:
import cv2
import numpy as npimg = cv2.imread('img7.png',0)kernel = np.ones((5,5),np.uint8)
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)cv2.imshow('src',img)
cv2.imshow('show',blackhat)
cv2.waitKey()
结构元素
我们在Numpy的帮助下创建了前面示例中的矩形结构元素. 但在某些情况下,可能需要椭圆/圆形内核。 所以为此,OpenCV有一个函数cv2.getStructuringElement()
. 只需传递内核的形状和大小,即可获得所需的内核.
代码:
# Rectangular Kernel
cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))Out[4]:
array([[1, 1, 1, 1, 1],[1, 1, 1, 1, 1],[1, 1, 1, 1, 1],[1, 1, 1, 1, 1],[1, 1, 1, 1, 1]], dtype=uint8)# Elliptical Kernel
cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
Out[5]:
array([[0, 0, 1, 0, 0],[1, 1, 1, 1, 1],[1, 1, 1, 1, 1],[1, 1, 1, 1, 1],[0, 0, 1, 0, 0]], dtype=uint8)# Cross-shaped Kernel
cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))
Out[6]:
array([[0, 0, 1, 0, 0],[0, 0, 1, 0, 0],[1, 1, 1, 1, 1],[0, 0, 1, 0, 0],[0, 0, 1, 0, 0]], dtype=uint8)
opencv python 图像形态学操作/图像腐蚀/图像膨胀/开运算/闭运算/顶帽/黑帽相关推荐
- OpenCV与图像处理学习六——图像形态学操作:腐蚀、膨胀、开、闭运算、形态学梯度、顶帽和黑帽
OpenCV与图像处理学习六--图像形态学操作:腐蚀.膨胀.开.闭运算.形态学梯度.顶帽和黑帽 四.图像形态学操作 4.1 腐蚀和膨胀 4.1.1 图像腐蚀 4.1.2 图像膨胀 4.2 开运算与闭运 ...
- 【OpenCV】图像的形态学操作|腐蚀|膨胀|Canny边缘检测
文章目录 常见图像形态学算法 膨胀和腐蚀概念 erode 膨胀和腐蚀的主要用途 结构元素 图像噪声分类 给图像添加噪声 图像添加噪声 GaussianBlur medianBlur bilateral ...
- python+OpenCv笔记(七):图像的形态学操作(腐蚀与膨胀、开闭运算、礼帽与黑帽)
一.腐蚀与膨胀 腐蚀就是原图中高亮的部分被蚕食,效果图拥有比原图更小的高亮区域. 腐蚀的作用是:消除物体边界点,使目标缩小,可以消除小于结构元素的噪声点. 膨胀就是使原图中高亮的部分扩张,效果图拥有比 ...
- OpenCV 形态学操作之腐蚀与膨胀,开运算与闭运算,顶帽与黑帽,图像梯度运算相关知识点回顾
Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧.本篇博客是这个系列的第 45 篇. 该系列文章导航参考:https://blog.csdn.net/hihell/categ ...
- opencv 核 腐蚀_OpenCV学习笔记(五)形态学操作:腐蚀、膨胀
一.形态学概述 我们图像处理中指的形态学,往往表示的是数学形态学.下面一起来了解数学形态学的概念. 下面是来自百度百科对数学形态学的解释: 数学形态学是由一组形态学的代数运算子组成的,它的基本运算有4 ...
- 形态学操作之腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽和黑帽
1.腐蚀和膨胀 图像的腐蚀和膨胀实际上是用某种形状的窗去遍历图像中的每一个像素,并用这个形状中的最大值或最小值做为锚点的值.若取的是最小值,则是腐蚀操作,若取的是最大值,则是膨胀操作.这里某种形状可以 ...
- 图像形态学操作之腐蚀
note // 腐蚀 // 输入图像一般为二值图像 // 二行二列腐蚀矩阵的原点:(0,0) // 三行三列腐蚀矩阵的原点:(1,1) // 膨胀过程中,腐蚀矩阵的原点所在位置为锚点 // 腐蚀原理: ...
- [图像形态学操作]——腐蚀和膨胀、开闭运算、黑帽礼帽
形态学转换是基于图像形状的一些简单操作,它通常在二进制图像上执行.腐蚀和膨胀是两个基本的形态学运算符.然后它的变体形式如:开运算.闭运算.礼帽黑帽等. 一.连通性 在图像学当中,图像的最小单位是像素, ...
- OpenCV_05 形态学操作:连通性+腐蚀和膨胀+开闭运算+礼帽和黑帽
1 连通性 在图像中,最小的单位是像素,每个像素周围有8个邻接像素,常见的邻接关系有3种:4邻接.8邻接和D邻接.分别如下图所示: 4邻接:像素p(x,y)的4邻域是:(x+1,y):(x-1,y): ...
- opencv中的形态学操作
形态学操作 1 连通性 在图像中,最小的单位是像素,每个像素周围有8各邻接像素,常见的邻接关系有3种:4邻接.8邻接和D邻接.分别如下图所示: 4邻接:像素p(x,y)的4邻域是:(x+1,y).(x ...
最新文章
- Machine Learning | (4) Scikit-learn的分类器算法-逻辑回归
- 2_2 递归与分治策略(分治法的基本思想)
- python进程间通信的秘密
- Linux快速复制T级数据或删除大量小文件
- P3345 [ZJOI2015]幻想乡战略游戏
- python点击按钮创建进程_python-创建进程的三种方式
- STM32“隐藏的定时器”-DWT
- 张一鸣批评的互联网“语言腐败”,危害到底有多大?
- 并行算法第三讲:稠密矩阵乘法
- Union的一个妙法
- xcode动态改变窗口大小_[SwiftUI 100天] 在 SwiftUI 中动态过滤 @FetchRequest
- 加速度传感器,磁场传感器和陀螺仪传感器案例
- 一个SQL SERVER查询分析器非常好用的工具
- 如何使用ProSave软件对触摸屏进行OS 更新?
- 基于ssm框架的绩效管理系统
- 约克大学计算机语言班,约克大学语言班申请
- 升级mac系统正在计算机,苹果电脑系统更新,能用手机 APP 了,但我不建议你升级...
- FPGA存储块,有没有使能Primitives output Register作用
- mnn模型从训练-转换-预测
- Python编程输出三角形的边长及面积
热门文章
- windows文件服务器双机热备_遇到ZFS文件系统如此棘手的问题,这种办法简单又高效!...
- QMouseEvent
- MySQL中的数据查询
- 常见的物联网通信协议
- include的两种形式、CPP的搜索路径
- oracle迁移postsql的,osdba's blog : Oracle迁移PostgreSQL系列文章之二:merge语句
- java 拼接字符串性能_java字符串拼接与性能分析详解
- java过程调用语句_Java之流程控制语句
- eclipse配置mysql教程_在Eclipse连接mysql-----配置jbdc_MySQL
- 面向对象的一个实例 (银行管理系统)