形态学滤波

定义结构元素

形态学处理的核心就是定义结构元素,在OpenCV-Python中,可以使用其自带的getStructuringElement函数,也可以直接使用NumPy的ndarray来定义一个结构元素。
函数原型:

Mat getStructuringElement(int shape, //核的形状  0:矩形  1:十字交叉形  2: 椭圆 Size ksize,//核大小Point anchor=Point(-1,-1) //核中心位置,默认位于形状中心处);椭圆:cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
矩形:cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
十字交叉:cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))

膨胀与腐蚀

腐蚀:腐蚀会把物体的边界腐蚀掉,卷积核沿着图象滑动,如果卷积核对应的原图的所有像素值为1,那么中心元素就保持原来的值,否则变为零。主要应用在去除白噪声,也可以断开连在一起的物体。

膨胀:卷积核所对应的原图像的像素值只要有一个是1,中心像素值就是1。

一般在除噪上的步骤是,先腐蚀再膨胀,因为腐蚀在去除白噪声的时候也会使图像缩小,所以我们之后要进行膨胀。当然也可以用来将两者物体分开。

膨胀和腐蚀是相对白色部分(高亮部分)而言的,膨胀是图像中的高亮部分进行膨胀,效果图拥有比原图更大的高亮区域;腐蚀是原图中的高亮部分被腐蚀,效果图拥有比原图更小的高亮区域。

实例程序:

import numpy as np
import cv2.cv2 as cv2  # 默认格式为BGR
import matplotlib.pyplot as plt  # python图片处理库def cv2_imread(file_path, flag=1):# 读取图片数据return cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), flag)if __name__ == "__main__":# 读取图像img = cv2_imread("D:\\MATLAB2020\\bin\\yige.jpg")#增加噪音for i in range(3000):  # 添加3000个噪声点x = np.random.randint(0, h)  # 随机取行y = np.random.randint(0, w)  # 随机取列img[x, y, :] = 255  # 行和列设置为白色噪声点kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5, 5))print(kernel)eroded=cv2.erode(img,kernel)dilated=cv2.dilate(eroded,kernel)image_output = np.hstack((img, eroded, dilated))plt.axis('off')  # 关闭坐标轴  设置为on则表示开启坐标轴img= cv2.cvtColor(img, cv2.COLOR_BGR2RGB)eroded = cv2.cvtColor(eroded, cv2.COLOR_BGR2RGB)dilated = cv2.cvtColor(dilated, cv2.COLOR_BGR2RGB)plt.subplot(131)plt.imshow(img)plt.title("img")plt.subplot(132)plt.imshow(eroded)plt.title("eroded")plt.subplot(133)plt.imshow(dilated)plt.title("dilated")plt.show()  # 显示图像

开运算与闭运算

开运算:先腐蚀后膨胀

(1)开运算能够除去孤立的小点,毛刺,而总的位置和形状不便。
(2)开运算是一个基于几何运算的滤波器。
(3)结构元素大小的不同将导致滤波效果的不同。
(4)不同的结构元素的选择导致了不同的分割,即提取出不同的特征。

闭运算:先膨胀后腐蚀

(1)闭运算能够填平小湖(即小孔),弥合小裂缝,而总的位置和形状不变。
(2)闭运算是通过填充图像的凹角来滤波图像的。
(3)结构元素大小的不同将导致滤波效果的不同。
(4)不同结构元素的选择导致了不同的分割。

开运算可以用来消除小物体,在纤细点处分离物体。

相关函数:

cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)#开运算
cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)#闭运算

形态学梯度运算

梯度=膨胀-腐蚀

形态学梯度能够提取物体边缘

相关函数:

cv2.morphologyEx(img,cv2.MORTH_GRADIENT,kernel)#闭运算

顶帽与黑帽

顶帽:原图像 - 开运算图

突出原图像中比周围亮的区域

黑帽:闭运算图 - 原图像

突出原图像中比周围暗的区域

相关函数:

cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)#开运算
cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)#闭运算

总结

膨胀和腐蚀是相对白色部分(高亮部分)而言的,膨胀是图像中的高亮部分进行膨胀,效果图拥有比原图更大的高亮区域;腐蚀是原图中的高亮部分被腐蚀,效果图拥有比原图更小的高亮区域。开运算可以用来消除小物体,在纤细点处分离物体。闭运算能够排除黑色区域。形态学梯度可以用来保留物体的边缘轮廓。黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域。

cv2.morphologyEx函数的标识符:

标识符 含义
MORPH_OPEN 开运算
MORPH_CLOSE 闭运算
MORPH_ERODE 腐蚀运算
MORPH_DILATE 膨胀运算
MORTH_GRADIENT 形态学梯度运算
MORTH_TOPHAT 顶帽运算
MORTH_BLACKHAT 黑帽运算

Opencv-python形态学滤波操作相关推荐

  1. OpenCV+python:模糊操作

    模糊操作是图像处理中最简单和常用的操作之一,使用该操作的原因之一就为了给图像预处理时减低噪声. 模糊操作基于离散卷积计算: g(i,j)=∑k,lf(i+k,j+l)∗h(k,l)g(i,j) = \ ...

  2. opencv python 高斯滤波_OpenCV 学习:8 高斯滤波GaussianBlur

    1 什么是高斯滤波? 高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程.[1]通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他 ...

  3. opencv python高斯滤波

    OpenCV是一个开源的计算机视觉库,提供了很多用于图像处理和计算机视觉的工具.它可以通过 Python 进行访问.高斯滤波是一种常用的图像平滑处理方法,用于去除图像中的噪声和模糊不清的细节. 在 O ...

  4. OpenCV+python图像处理基础操作

    1.读写图像(建议使用绝对路径) import cv2 from cv2 im = cv2.imread('C:/Users/admin/Desktop/test/1.jpg') cv2.imwrit ...

  5. OpenCV—python Gabor滤波(提取图像纹理)

    文章目录 一.Gabor滤波简介 二.代码演示 Gabor是一个用于边缘提取的线性滤波器,其频率和方向表达与人类视觉系统类似,能够提供良好的方向选择和尺度选择特性,而且对于光照变化不敏感,因此十分适合 ...

  6. OpenCV Python教程(3)(4)(5): 直方图的计算与显示 形态学处理 初级滤波内

    OpenCV Python教程(3.直方图的计算与显示) 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图 直方图的背景知识.用途 ...

  7. 使用Python,OpenCV进行形态学操作

    使用Python,OpenCV进行形态学操作) 1. 效果图 2. 原理 3. 源码 3.1 [制作logo源码](https://blog.csdn.net/qq_40985985/article/ ...

  8. opencv —— morphology形态学操作函数讲解(python)

    opencv -- morphology形态学操作函数讲解 目录 opencv -- morphology形态学操作函数讲解 形态学滤波:morphologyEx 函数 开运算:先腐蚀后膨胀. 闭运算 ...

  9. python+OpenCV图像处理(十二)车牌定位中对图像的形态学组合操作处理

    车牌定位中对图像的形态学组合操作处理 所谓的车牌定位,其中最关键的部分就是对图片的处理,参数的设置,并使之拥有泛化能力. 首先传入图片,在进行大规模的图片处理时,因为无法确定图片的尺寸,所以需要将原始 ...

最新文章

  1. 负载均衡集群ipvsadm命令及基本用法
  2. BZOJ5212 ZJOI2018历史(LCT)
  3. GetLocalTime
  4. java怎样才算高级_怎样才算是一名java高手?
  5. 跨界合作成潮流 智能家居竞争升级
  6. 微信小程序图片上传uploadfile失败
  7. cesium加载geoserver发布的mvt服务
  8. 第5章 LinearR/PLR/SVR/KNN/DTR/RFR(测算房价)
  9. 父类引用指向子类对象是什么意思
  10. Python练习-2
  11. verdaccio每次下载有时候不会加载taz压缩包原因解决
  12. Android 获取手机系统版本号、获取手机型号、获取手机厂商、获取手机IMEI、获取手机CPU_ABI、获取手机唯一识别码
  13. 终稿:教材管理系统与教学评估系统
  14. SSM启动时js或者css文件显示404问题
  15. 【Codeforces】A3组刷题记录( 43 / 43 )
  16. 小程序好像文本不能复制?
  17. 养生程序员之生活小窍门
  18. v45.05 鸿蒙内核源码分析(Fork) | 一次调用 两次返回 | 百篇博客分析HarmonyOS源码
  19. vcs/urg 进行覆盖率coverage merge及部分merge到整体
  20. 如何自建微信外卖平台_微信外卖软件怎么搭建需要多少钱

热门文章

  1. JAVA基础英语单词
  2. 白噪声校验matlab,白噪声的测试MATLAB程序.doc
  3. 04-小键盘字母u输出为4的问题
  4. [Python]经典例题——解一元二次方程
  5. azure 配置vpn_ASP.NET和Azure中配置中的私有配置数据和连接字符串的最佳做法
  6. word固定上方菜单栏
  7. QQ音乐关键字搜索并生成下载url
  8. 银行卡号每输四位加空格,及银行卡的识别(此银行卡号是那个银行)
  9. 【软件群英会】 12月1日晚上聊天记录
  10. ndis拨号软件 linux,嵌入式linux系统下NDIS拨号