图像的形态学开操作(开运算)和闭操作(闭运算)的概念和作用,并用OpenCV的函数morphologyEx()实现对图像的开闭操作

article/2025/10/3 15:43:31

大家看这篇博文前可以先看一看下面这篇博文,下面这篇博文是这篇博文的基础:
详解图像形态学操作之图形的腐蚀和膨胀的概念和运算过程,并利用OpenCV的函数erode()和函数dilate()对图像进行腐蚀和膨胀操作

图像形态学腐蚀可以将细小的噪声区域去除,但是会将图像主要区域的面积缩小,造成主要区域的形状发生改变;图像形态学膨胀可以扩充每一个区域的面积,填充较小的空洞,但是会增加噪声的面积。
根据两者的特性将图像腐蚀和膨胀适当的结合,便可以既去除图像中的噪声,又不缩小图像中主要区域的面积;既填充了较小的空洞,又不增加噪声所占的面积。
将图像的腐蚀和膨胀结合产了以下这些运算:
图像的开运算、图像的闭运算、图像的形态学梯度运算、图像的顶帽运算、图像的黑帽运算、图像的击中击不中变换。

本篇博文先介绍图像的开运算和图像的闭运算。

形态学开运算操作的定义是先对图像进行腐蚀操作,然后再对图像进行膨胀操作。它先对图像进行腐蚀,消除图像中的噪声和较小的连通域,之后通过膨胀运算弥补较大的连通域中因腐蚀造成的面积减小。
形态学开运算的作用有以下这些:

  • 消除值高于邻近点的孤立点,达到去除图像中噪声的作用;
  • 消除较小的连通域,保留较大的连通域;
  • 断开较窄的狭颈,可以在两个物体纤细的连接处将它们分离;
  • 不明显改变较大连通域的面积的情况下平滑连通域的连界、轮廓;

形态学闭运算则刚好相反,先对图像进行膨胀操作,再对图像进行腐蚀操作。它先对图像进行膨胀以填充连通域内的小型空洞,扩大连通域的边界,连接邻近的两个连通域,之后通过腐蚀运算减少由膨胀运算引起的连通域边界的扩大及面积的增加。
形态学闭运算的作用有以下这些:

  • 消除值低于邻近点的孤立点,达到去除图像中噪声的作用;
  • 连接两个邻近的连通域;
  • 弥合较窄的间断和细长的沟壑;
  • 去除连通域内的小型空洞;
  • 和开运算一样也能够平滑物体的轮廓;

在OpenCV中,我们可以用函数morphologyEx()实现对图像的开闭运算,其函数原型如下:

void cv::morphologyEx	(	InputArray 	src,OutputArray dst,int 	op,InputArray 	kernel,Point 	anchor = Point(-1,-1),int 	iterations = 1,int 	borderType = BORDER_CONSTANT,const Scalar & 	borderValue = morphologyDefaultBorderValue() )		

参数意义与上篇博文(链接 https://blog.csdn.net/wenhao_ir/article/details/124763833)中的腐蚀和膨胀操作函数erode()、dilate()一样。只是多一个 op 参数,它的值用于确定作何种图像形态学运算,其可取值及意义如下图所示:
在这里插入图片描述
从上图可以看出,它可以取MORPH_OPEN、MORPH_CLOSE 、MORPH_GRADIENT、MORPH_TOPHAT 、MORPH_BLACKHAT这五个值,分别对应于图像形态学的开操作、闭操作、梯度运算、顶帽运算和黑帽运算。
本篇博文中我们用值MORPH_OPEN和MORPH_CLOS实现图像的开闭操作。

实现图像开运算操作的示例代码如下:
代码中用到的图片下载链接:https://pan.baidu.com/s/1J3aAurAH1w94Z4vhMg4xHA?pwd=v253

//博主微信/QQ 2487872782
//有问题可以联系博主交流
//有图像处理需求也可联系博主
//图像处理技术交流QQ群 271891601//OpenCV版本:3.0
//VS版本:2013#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<opencv2/imgcodecs/imgcodecs.hpp>
#include <opencv2/imgproc/imgproc.hpp>using namespace cv;int main()
{//载入原图   Mat image = imread("F:/material/images/P0047-开运算示例图片.jpg", 0);//显示原图  imshow("开运算原图", image);//获取结构cv::Mat element1 = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(7, 7));Mat out1;//进行形态学开运算操作  morphologyEx(image, out1, MORPH_OPEN, element1);//形态学开运算//显示效果图  imshow("开运算效果图", out1);waitKey(0);return 0;
}

运行结果如下图所示:
在这里插入图片描述
从运行结果中我们可以看出,通过开运算,断开了较窄的狭颈,在两个目标的纤细的连接处将它们分离。

实现图像闭运算操作的示例代码如下:
代码中用到的图片下载链接:https://pan.baidu.com/s/1zUuLfy3IWWIjb2EhyKILNA?pwd=syn4

//博主微信/QQ 2487872782
//有问题可以联系博主交流
//有图像处理需求也可联系博主
//图像处理技术交流QQ群 271891601//OpenCV版本:3.0
//VS版本:2013#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<opencv2/imgcodecs/imgcodecs.hpp>
#include <opencv2/imgproc/imgproc.hpp>using namespace cv;int main()
{//载入原图   Mat image = imread("F:/material/images/P0047-闭运算示例图片.jpg", 0);//显示原图  imshow("闭运算原图", image);//获取结构cv::Mat element1 = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(20, 20));Mat out1;//进行形态学闭运算操作  morphologyEx(image, out1, MORPH_CLOSE, element1);//形态学开运算//显示效果图  imshow("闭运算效果图", out1);waitKey(0);return 0;
}

在这里插入图片描述
从以上运行结果我们可以看出,通过形态学闭运算,连接了两个邻近的连通域。

扩展阅读:
详解图像形态学操作之图形的腐蚀和膨胀的概念和运算过程,并利用OpenCV的函数erode()和函数dilate()对图像进行腐蚀和膨胀操作
图像的形态学梯度运算(基本梯度、外部梯度、内部梯度、X方向梯度、Y方向梯度)的概念、作用以及相关的OpenCV示例代码
图像形态学操作之顶帽操作(TopHat)与黑帽操作(BlackHat)
详解图像形态学中的击中击不中变换操作(HMT),并提醒大家OpenCV4中的击中击不中变换操作是有问题的


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

相关文章

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

☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░ 一、引言 在《OpenCV-Python图像处理&#xff1a;腐蚀和膨胀原理及erode、dilate函数介绍 https://blog.csdn.net/LaoYuanPython/article/details/109441709》等系列博文中老猿详细介绍了腐蚀和膨胀的原理、…

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

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

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

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

开运算—闭运算

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

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

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

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

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

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

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

开运算、闭运算及其所用

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

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

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

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

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

OpenCV之开运算与闭运算

1.开运算&#xff1a;先腐蚀&#xff0c;后膨胀 开运算总结&#xff1a; &#xff08;&#xff11;&#xff09;开运算能够除去孤立的小点&#xff0c;毛刺和小桥&#xff0c;而总的位置和形状不便。 &#xff08;&#xff12;&#xff09;开运算是一个基于几何运算的滤波器。…

halcon 开运算与闭运算

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

图像开运算

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

8.3 开运算

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

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

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

20、开运算与闭运算

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

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

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

形态学 - 开运算和闭运算

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

RNN流程详解

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

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

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