cv2.getStructuringElement()函数及开、闭、腐蚀、膨胀原理讲解
作者:SerendipityMIT 发布时间:2023-08-24 23:07:23
cv2.getStructuringElement()函数的作用是返回一个结构元素(卷积核),具体解析如下:
kernel = cv2.getStructuringElement(a,b,c): # 得到一个结构元素(卷积核)。主要用于后续的腐蚀、膨胀、开、闭等运算。
因为这些运算都是依赖于卷积核的,不同的卷积核(形状、大小)对图形的腐蚀、膨胀操作效果不一样输入参数:
a设定卷积核的形状、b设定卷积核的大小、c表示描点的位置,一般 c = 1,表示描点位于中心。(下文细说)
返回值:
返回指定形状和尺寸的结构元素(一般是返回一个矩形)、也就是腐蚀/膨胀用的核的大小。(下文细说)
a取不同的参数会导致卷积核有不同的形状,a参数有三个:
①:MORPH_RECT(函数返回矩形卷积核)
②:MORPH_CROSS(函数返回十字形卷积核)
③:MORPH_ELLIPSE(函数返回椭圆形卷积核)
b:用一个(x,y)的形式表示,表示卷积核有x行,y列。
腐蚀操作
①:腐蚀操作的对象是二值化图像,二值图像前景物体为1,背景为0,卷积核也是只含有0和1。
②:比如这是图像A和一个卷积核(结构元素):
(注意A的像素点(方格)不是0就是1。B的描点(中心点)就是我们通过getStructuringElement函数中的参数c来确定的,也可以设立在其他地方)
腐蚀的步骤就是用卷积核B的描点(此处就是中心点),来对齐A中的每一个小方格,然后选取卷积核B的方格中的数据的最小值,意思就是当B的描点对齐A的边界方格的时候,那么B的其他四个方格可能位于A图像中的0像素点,那么最小值就是0,那么就把卷积核B的描点对应的A中的小方格设为0,这就导致使用腐蚀操作后,我我们能看到的白色区域减少的原因。
kernel = cv2.getStructuringElement(a,b,c)
cv2.erode(img, kernel, iteration = 1)# 腐蚀操作
膨胀操作
原理与腐蚀操作一样,只不过是取最大像素值,其他地方没差别。
kernel = cv2.getStructuringElement(a,b,c)
cv2.dilate(img, kernel, iteration = 1)# 膨胀操作
开、闭
开:先进行腐蚀运算,再进行膨胀运算。
闭:先进行膨胀运算,再进行腐蚀运算。
kernel = cv2.getStructuringElement(a,b,c)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN,kernel) # 开运算
opening = cv2.morphologyEx(ima,cv2.MORPH_CLOSE,lernel) # 闭运算
开运算和闭运算都是处理噪点用的:
开:消去一个黑图中的很多小白点
闭:小区一个白图中的很多小黑点 如:
原图:
开运算:
闭运算:
来源:https://blog.csdn.net/m0_60447786/article/details/125466116
猜你喜欢
- 一、css样式表滤镜的构成 滤镜作为样式表大家庭中的一员,它跟其他样式表元素的定义和应用方式当然是一样的,能够直接定义在HTML标识的<
- 1. ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,ascii(a) a,ascii(0
- 很多人都有研究闭合浮动元素的问题,但是解决方法却不一样,也并不是每一种方法都尽善尽美。闭合浮动元素(或者叫清除浮动)是web标准设计中经常会
- 模型定义常用函数利用nn.Parameter()设计新的层import torchfrom torch import nnclass MyL
- 代码如下:Class XMLClass Private objXml Private xmlDoc Private xmlPath '
- js实现千分符转化function fmoney(s, n){ n = n > 0 && n <= 20 ? n
- 远程连接oracle只用PLSQLDeveloper客户端,不配置tnsnames.ora文件在PL/SQL中填写:1.UserName:用
- 我就废话不多说了,还是直接看代码吧!#!/usr/bin/env python3#coding = utf-8def is_triangle
- python-opencv 中值滤波{cv2.medianBlur(src, ksize)}中值滤波将图像的每个像素用邻域 (以当前像素为中
- 1|0使用yield完成多任务import timedef test1(): while True: print("-
- 前言Python包含6种内置的序列:列表、元组、字符串 、Unicode字符串、buffer对象、xrange对象。在序列中的每个元素都有自
- 使用.net2005自带的SQL-Express连接不上。解决方法:1.网络防火墙阻止数据库连接;2.默认SQL-Express没有启动Sa
- Pytorch的backward()函数假若有多个loss函数,如何进行反向传播和更新呢? x = torch.tensor(2.0, re
- PHP htmlspecialchars() 函数实例把预定义的字符 "<" (小于)和 ">&q
- 使用sql语句删除数据库中重复记录的两个方法如下:方法一declare @max integer,@id in
- 记录应用程序的操作日志可以使用数据库、文本文件、XML文件等。我这里介绍的是使用 XML 文件记录操作日志。我觉得使用 XML 记录操作日志
- 在网上查找大量资料,经过自己的不懈努力,终于测试成功了。原来要在服务器上安装mysql odbc 3.51 ,还有数据库用户名及密码,用下面
- 目前使用MySQL的网站,多半同时使用Memcache作为键值缓存。虽然这样的架构极其流行,有众多成功的案例,但过于依赖Memcache,无
- 最近,我在做网页的时候,经理老是反应网页中一些栏目中没有背景图片。我说:背景图片有的,你刷新看看。但是他说:我可以刷新看看,但是你不能老是让
- M2广义货币供应量:流通于银行体系之外的现金加上企业存款、居民储蓄存款以及其他存款,它包括了一切可能成为现实购买力的货币形式,通常反映的是社