OpenCV-Python图像运算变换处理:开运算和闭运算以及不同核矩阵的影响分析

article/2025/10/3 15:40:42

☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░

一、引言

在《OpenCV-Python图像处理:腐蚀和膨胀原理及erode、dilate函数介绍 https://blog.csdn.net/LaoYuanPython/article/details/109441709》等系列博文中老猿详细介绍了腐蚀和膨胀的原理、算法、Python的模拟实现以及OpenCV函数的详细语法及应用,具体应用时,如果核矩阵的有效元素范围大于图像黑色孔洞,则膨胀可以填充图像中的孔洞及图像边缘的小凹陷部分,而腐蚀可以消除图像边缘类似毛刺的小的亮色部分,并缩小前景图像。

腐蚀和膨胀是形态学运算的基本运算,二者在图像处理功用上有一定相反的效果,但是二者并不是逆运算,二者可以级联结合使用。通过腐蚀和膨胀的复合和集合运算组合,就构成了形态学运算簇。

使用同一个结构元素,先对图像进行腐蚀运算,再对图像进行膨胀运算,二者的组合成为开运算;反过来先对图像进行膨胀运算,再对图像进行腐蚀运算,称为闭运算。开运算和闭运算是形态学中最为重要的两个组合运算。

在《OpenCV-Python图像形态变换概述及morphologyEx函数介绍 https://blog.csdn.net/LaoYuanPython/article/details/109556425》介绍了OpenCV-Python形态学变换的函数morphologyEx,在本节不重复介绍开运算和闭运算的具体函数调用,仅直接使用。

二、开、闭运算简介

2.1、功能和作用

开运算就是先腐蚀后膨胀的过程,用来消除背景中的小点前景色噪声、平滑形状边界、断开物体之间的细小连接,当然不同的核矩阵效果会不同,有效元素为圆的核矩阵可以平滑边界、去除突刺。

闭运算有助于关闭前景物体上的小孔,或者小黑点。闭运算用来填充物体内的小空洞,连接邻近的物体,连接断开的轮廓线,平滑其边界的同时不改变面积。闭运算是先膨胀后腐蚀的过程。合理选择卷积核大小,太小了无法去除前景图的黑点。

2.2、特性

开运算特性
  • 开运算能够除去孤立的小点,毛刺和两个景物之间的细连接线,而总的位置和形状不变
  • 开运算是一个基于几何运算的滤波器。 结构元素大小的不同将导致滤波效果的不同
  • 不同的结构元素的选择导致了不同的分割,即提取出不同的特征。
闭运算特性
  • 闭运算能够填平小湖(即小孔),弥合小裂缝,而总的位置和形状不变
  • 闭运算是通过填充图像的凹角来滤波图像的
  • 结构元素大小的不同将导致滤波效果的不同
  • 不同结构元素的选择导致了不同的分割

三、案例

3.1、案例背景

  • 为了观察开运算和闭运算对图像变换的影响,老猿自己构造了一张包含多个小图片的复合图片《黑白多态图.png》,可以用于对比观察变换后图像的变化,图像内容如下:
    在这里插入图片描述

  • 由于OpenCV的图像展示一张图像一个窗口,且无法展现超出屏幕范围大小的图像,老猿自己实现了三个函数来实现多图同屏自动排列展示

  1. previewImg(img):调用操作系统缺省图像阅读器展示图像
  2. preparePreviewImg(imgTitle=None,img=None,firstImg=False):将要多图合并展现的图片加到展现列表,如果img为None,则图像换行展现,否则图像根据大小自动排列
  3. previewImgList():将展现列表中的图片合并进行展现,展现的图像下面增加图像说明的文字,展现后清空展现列表

相关函数详细内容请见《OpenCV-Python中预览超大图的程序实现方法:https://blog.csdn.net/LaoYuanPython/article/details/110195287》。

  • 为了研究不同核对图像变换的影响,会使用不同形状不同大小的的核进行变换对比

3.2、不同大小核案例

下面使用不同的大小的核进行开闭运算。

代码:
def morphologyExTest(imgObj,imgTitle=''):if isinstance(imgObj, str):img = cv2.imread(imgObj)#, cv2.IMREAD_GRAYSCALE)if img is None:img = cv2.imdecode(np.fromfile(imgObj, dtype=np.uint8), -1)imgTitle = imgTitle+imgObj+': 'else:imgTitle = imgTitle + ': 'kernal = cv2.getStructuringElement(cv2.MORPH_RECT ,(3,3))imgOpen = preparePreviewImg(imgTitle+'开运算,矩形核大小3*3',cv2.morphologyEx(img, cv2.MORPH_OPEN,kernal))imgClose = preparePreviewImg(imgTitle+'闭运算,矩形核大小3*3',cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernal))kernal = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))imgOpen = preparePreviewImg(imgTitle + '开运算,矩形核大小5*5', cv2.morphologyEx(img, cv2.MORPH_OPEN, kernal))imgClose = preparePreviewImg(imgTitle + '闭运算,矩形核大小5*5', cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernal))preparePreviewImg()
变换后图像:

在这里插入图片描述
从上面图像对比可以看到: 核越大,开运算被侵蚀的前景色越多,闭运算则背景色被填充越多。

3.3、不同形状核案例

下面分别使用横线和竖线的核进行开闭运算。

代码:
def morphologyExTest(imgObj,imgTitle=''):if isinstance(imgObj, str):img = cv2.imread(imgObj)#, cv2.IMREAD_GRAYSCALE)if img is None:img = cv2.imdecode(np.fromfile(imgObj, dtype=np.uint8), -1)imgTitle = imgTitle+imgObj+': 'else:imgTitle = imgTitle + ': 'kernal = np.ones((1,5),np.uint8)imgOpen = preparePreviewImg(imgTitle+'开运算,横线核大小5*5',cv2.morphologyEx(img, cv2.MORPH_OPEN,kernal))imgClose = preparePreviewImg(imgTitle+'闭运算,横线核大小5*5',cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernal))kernal = np.ones((5,1),np.uint8)imgOpen = preparePreviewImg(imgTitle + '开运算,竖线核大小5*5', cv2.morphologyEx(img, cv2.MORPH_OPEN, kernal))imgClose = preparePreviewImg(imgTitle + '闭运算,竖线核大小5*5', cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernal))preparePreviewImg()
变换后图像:

腐蚀膨胀
从上图可以看到,横线的核和竖线的核对开闭的影响非常明显,其实就是对腐蚀和膨胀的影响。

四、小结

本文简单介绍了形态变换中的开运算和闭运算,开运算和闭运算是形态学中最为重要的两个组合运算,这两个运算是不同形状不同大小的核对图像变换的影响比较大,开运算有助于断开一些图像间的细小连接或背景上的一些图像噪点、去除图像边缘的凸起,闭运算可以用于填充图像上的细小孔洞、填充图像轮廓上的凹陷。具体应用时需要根据处理图像的特征和需要达到的目标来设置核矩阵的形状和大小。

五、形态变换博文传送门

下面是老猿博文中与形态变换相关的博文列表:

  1. https://blog.csdn.net/LaoYuanPython/article/details/109441709 OpenCV-Python图像处理:腐蚀和膨胀原理及erode、dilate函数介绍
  2. https://blog.csdn.net/LaoYuanPython/article/details/109984045 OpenCV-Python图像运算变换处理:开运算和闭运算以及不同核矩阵的影响分析
  3. https://blog.csdn.net/LaoYuanPython/article/details/109556425 OpenCV-Python图像形态变换概述及morphologyEx函数介绍
  4. https://blog.csdn.net/LaoYuanPython/article/details/109768675 OpenCV-Python图像运算变换处理:形态学梯度运算及分类
  5. https://blog.csdn.net/LaoYuanPython/article/details/110195287 OpenCV-Python中预览超大图的程序实现方法
  6. https://blog.csdn.net/LaoYuanPython/article/details/110223709 OpenCV-Python图形图像处理:利用TopHat顶帽获取背景色中的噪点
  7. https://blog.csdn.net/LaoYuanPython/article/details/110294445 OpenCV-Python图形图像处理:利用黑帽去除图像浅色水印
  8. https://blog.csdn.net/LaoYuanPython/article/details/110676764 OpenCV-Python击中击不中HITMISS形态变换详解

更多OpenCV-Python的介绍请参考专栏《OpenCV-Python图形图像处理 》
专栏网址:https://blog.csdn.net/laoyuanpython/category_9979286.html

关于老猿的付费专栏

老猿的付费专栏《使用PyQt开发图形界面Python应用 》(https://blog.csdn.net/laoyuanpython/category_9607725.html)专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》 (https://blog.csdn.net/laoyuanpython/category_10232926.html)详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏都适合有一定Python基础但无相关知识的小白读者学习。

付费专栏文章目录:《moviepy音视频开发专栏文章目录》(https://blog.csdn.net/LaoYuanPython/article/details/107574583)、《使用PyQt开发图形界面Python应用专栏目录 》(https://blog.csdn.net/LaoYuanPython/article/details/107580932)。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》(https://blog.csdn.net/laoyuanpython/category_9831699.html)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python、学OpenCV!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░


http://chatgpt.dhexx.cn/article/df10G3US.shtml

相关文章

灰度级形态学 - 灰度开运算和灰度闭运算

目录 1. 介绍 2. code 1. 介绍 灰度级的开运算和闭运算和二值图像的处理一样,只不过一个作用于灰度图,一个作用于二值图像 灰度级的开运算公式为: 先对图像做腐蚀,然后对腐蚀的结果做膨胀运算 灰度级的闭运算公式为&#xff…

OpenCV(七)形态学操作2--开运算与闭运算

目录 概述: morphologyEX()函数 一、开运算(分开) 1、基础理论 1、作用: 2、代码 3、效果 二、闭运算(封闭) 1、基础理论 1、作用 2、过程 2、代码 3、效果 总代码 参考资料: 概述…

开运算—闭运算

转载:https://blog.csdn.net/hanshanbuleng/article/details/80657148 如果不了解腐蚀与膨胀原理的同学那请看我前一期博客哦!) 1.开运算 开运算 先腐蚀运算,再膨胀运算(看上去把细微连在一起的两块目标分开了&…

Halcon形态学处理-腐蚀、膨胀、开运算、闭运算、顶帽运算和底帽运算

提示:文章参考了网络上其他作者的文章,以及相关书籍,如有侵权,请联系作者。 文章目录 前言一、腐蚀和膨胀1.腐蚀2.膨胀 二、开运算和闭运算1.开运算2.闭运算 三、顶帽运算和底帽运算1.顶帽运算2.底帽运算 总结参考文献 前言 图像的…

Opencv中的开运算和闭运算操作讲解(python实现)

文章目录 1.首先了解腐蚀和膨胀原理2.开运算(1)为什么开运算可以去白噪点呢?(2).函数讲解(3)代码实战 3.闭运算(1)函数讲解(2)代码实战 1.首先了解…

膨胀 腐蚀 开运算 闭运算 matlab,11. 形态学膨胀、腐蚀、开运算、闭运算

1. 膨胀:对边界点进行扩充,填充空洞,使边界向外部扩张的过程。 2. 腐蚀:消除物体边界点,使边界向内部收缩的过程,把小于结构元素的物体去除掉。 3. 开运算: 先腐蚀后膨胀的过程称为开运算,作用:去除孤立的小点,毛刺,消除小物体,平滑较大物体边界,同时不改变其面积。 4. 闭…

开运算、闭运算及其所用

1.开运算 开运算 先腐蚀运算,再膨胀运算(看上去把细微连在一起的两块目标分开了) 开运算的效果图如下图所示: 开运算总结: (1)开运算能够除去孤立的小点,毛刺和小桥&…

python --opencv图像处理形态学(开运算、闭运算、梯度运算、顶帽运算、黑帽运算)

引言 前面介绍了图像形态学的两种基础算法,图像腐蚀和图像膨胀,本篇接着介绍图像形态学中的开运算、闭运算以及梯度运算。 需要了解清楚图像的腐蚀与膨胀基础原理,不然真的没办法理解开运算和闭运算。 第一件事情还是给图像增加噪声,思路沿…

二值图像开闭运算matlab,【数字图像处理】图像开运算与闭运算

图像开启与闭合 图像开运算与闭运算与膨胀和腐蚀运算有关,由膨胀和腐蚀两个运算的复合与集合操作(并、交、补等)组合成的所以运算构成。 开运算与闭运算依据腐蚀和膨胀的不可逆性,演变而来。 开运算:先对图像腐蚀后膨胀 闭运算:先…

OpenCV之开运算与闭运算

1.开运算:先腐蚀,后膨胀 开运算总结: (1)开运算能够除去孤立的小点,毛刺和小桥,而总的位置和形状不便。 (2)开运算是一个基于几何运算的滤波器。…

halcon 开运算与闭运算

例一:毛刺在往外凸的面上 策略1:分割出黑色部分,然后通过开运算去掉毛刺,再通过原黑色部分区域减去开运算之后的区域,得到毛刺部分的区域。 1 read_image (Tu, C:/Users/xiahui/Desktop/tu.jpg) 2 binary_threshold …

图像开运算

开运算是先腐蚀后膨胀的过程,它能去除孤点、毛刺和小桥(连接两区域的小点),消除小物体、平滑大物体的边界,并且不明显改变面积。 开运算公式如下: #include"cv.h" #include "highgui.h&…

8.3 开运算

点击此处返回总目录 一、什么是开运算 一个图像先进行腐蚀,再进行膨胀。 这种操作,最后得到的图像就是对原始图像的去燥处理。并保持原有图像的形状不变。 这种操作叫做开运算。 官网上的例子&#xff…

形态学应用——图像开运算与闭运算

(如果不了解腐蚀与膨胀原理的同学那请看我前一期博客哦!) 1.开运算 开运算 先腐蚀运算,再膨胀运算(看上去把细微连在一起的两块目标分开了) 开运算的效果图如下图所示: 开运算总结&#xf…

20、开运算与闭运算

一、开运算含义 先进行腐蚀再进行膨胀就叫做开运算。开运算 (image) 膨胀 (腐蚀 (image)) 图像被腐蚀后,去除了噪声,但会压缩图像;对腐蚀过的图像进行膨胀处理,可以去除噪声并保持原有形状。 二、morphologyEx() 实现开运算 2…

形态学操作——开运算与闭运算

1.开运算 开运算 先腐蚀运算,再膨胀运算(看上去把细微连在一起的两块目标分开了) 开运算的效果图如下图所示: 开运算总结: (1)开运算能够除去孤立的小点,毛刺和小桥&am…

形态学 - 开运算和闭运算

目录 1. 介绍 2. 代码实现 2.1 开运算 2.2 闭运算 1. 介绍 膨胀和腐蚀操作都会有一个通病,就是会改变原目标的大小 开运算:先对目标腐蚀在膨胀 开运算能够平滑物体的轮廓、断开狭窄的狭颈、消除细长的突出物等等 开运算的一些理解:先…

RNN流程详解

RNN及其代码流程 本文重点关注RNN的 整个流程,而不是BP的推导过程 什么是RNN Recurrent Neural Network 循环神经网络 为什么需要RNN? 普通的神经网络都只能单独地处理一个个的输入,前一个输入和后一个输入是完全没有关系的。但是&#…

微信小程序:如何在{{}}中使用函数?WXML+WXS

前言 在项目中涉及到百分比的计算&#xff0c;js浮点数运算会出现精度问题&#xff0c;造成小数位数过多&#xff0c;因此想在模板语法中对值进行相应的处理。 开始 按照常规用法&#xff0c;使用js中的toFixed()进行处理&#xff1a; <view>&#xffe5;{{(cashMone…

wxPython:wx.Font详细解释用法

官方构造解释&#xff1a; 注解用法&#xff1a; wx.Font(pointSize, family, style, weight, underlineFalse, faceName"", encodingFONTENCODING_DEFAULT) pointSize &#xff1a;文字大小&#xff1a;floatfamily &#xff1a;字体系列&#xff1a;FontFamilyst…