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

大家看这篇博文前可以先看一看下面这篇博文,下面这篇博文是这篇博文的基础:
详解图像形态学操作之图形的腐蚀和膨胀的概念和运算过程,并利用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 参数,它的值用于确定作何种图像形态学运算,其可取值及意义如下图所示:

图像的形态学开操作(开运算)和闭操作(闭运算)的概念和作用,并用OpenCV的函数morphologyEx()实现对图像的开闭操作
从上图可以看出,它可以取MORPH_OPEN、MORPH_CLOSE 、MORPH_GRADIENT、MORPH_TOPHAT 、MORPH_BLACKHAT这五个值,分别对应于图像形态学的开操作、闭操作、梯度运算、顶帽运算和黑帽运算。
本篇博文中我们用值MORPH_OPEN和MORPH_CLOS实现图像的开闭操作。

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


#include
#include
#include
#include

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;
}

运行结果如下图所示:

图像的形态学开操作(开运算)和闭操作(闭运算)的概念和作用,并用OpenCV的函数morphologyEx()实现对图像的开闭操作
从运行结果中我们可以看出,通过开运算,断开了较窄的狭颈,在两个目标的纤细的连接处将它们分离。

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


#include
#include
#include
#include

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的函数morphologyEx()实现对图像的开闭操作
从以上运行结果我们可以看出,通过形态学闭运算,连接了两个邻近的连通域。

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

Original: https://blog.csdn.net/wenhao_ir/article/details/124797255
Author: 昊虹AI笔记
Title: 图像的形态学开操作(开运算)和闭操作(闭运算)的概念和作用,并用OpenCV的函数morphologyEx()实现对图像的开闭操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/637264/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 一零四、大数据可视化技术与应用实训(展示大屏幕)

    目录 一、定义 二、技能标准 三、实训安排 四、前台页面展示 五、项目架构 六、static 七、py文件 app.py data.py data_corp.py data_job…

    人工智能 2023年7月5日
    074
  • Python小游戏及登录系统

    大家好,我是Python领域的博主。如果你是编程爱好者可以小编一起学习,在这里我每天都会发Python的基础知识,以及相关的代码。如果文章有什么错误的地方,请不吝赐教。我一直坚信一…

    人工智能 2023年7月5日
    091
  • 语音识别研究方向

    远场语音识别1)语音激活检测(VAD) 需求背景:在近场识别场景,比如使用语音输入法时,用户可以用手按着语音按键说话,结束之后松开,由于近场情况下信噪比(signal to noi…

    人工智能 2023年5月25日
    081
  • 机器学习-对数几率回归

    目录 前言 一、对数几率回归的机器学习三要素 二、对数几率回归 2.1 算法原理 2.1.1 广义线性模型 2.1.2 对数几率回归 2.2 利用极大似然估计推导损失函数 2.2….

    人工智能 2023年6月18日
    0105
  • 如何在PyTorch中加载和处理图像数据

    问题背景 在深度学习中,图像数据是最常见和重要的数据类型之一。PyTorch是一个流行的深度学习框架,提供了一系列用于加载和处理图像数据的工具和函数。本文将详细介绍如何在PyTor…

    人工智能 2024年1月3日
    060
  • 从0到1开始运营你的开源产品

    开源产品精简说需要合规和价值,不仅仅只有代码,还有社区运营。 开源运营经验 种子用户 产品找种子用户,非常重要,开放出来稳定版本,投放到社区,可以去相关调性产品,写issue让感兴…

    人工智能 2023年6月29日
    080
  • Tensorflow声纹识别说话人识别

    前言本章介绍如何使用Tensorflow实现简单的声纹识别模型,首先你需要熟悉音频分类,我们训练一个声纹识别模型,通过这个模型我们可以识别说话的人是谁,可以应用在一些需要音频验证的…

    人工智能 2023年5月24日
    0100
  • 想学爬虫么?这里给你全准备好了

    目录 一. 爬虫总复习 1.1 爬虫四步骤 1.2 最简请求方式:requests.get() 二. 工具 2.1 Network 2.2 XHR和Doc 三. 解析与提取——Be…

    人工智能 2023年7月17日
    068
  • Opencv之图像滤波:5.中值滤波(cv2.medianBlur)

    之前介绍的均值滤波、方框滤波、高斯滤波,都是线性滤波方式。由于线性滤波的结果是所有像素值的线性组合,因此含有噪声的像素也会被考虑进去,噪声不会被消除,而是以更柔和的方式存在。这时使…

    人工智能 2023年6月18日
    090
  • 通过公式和源码解析 DETR 中的损失函数 & 匈牙利算法(二分图匹配)

    上一篇文章:DETR 论文精读,并解析模型结构_Flying Bulldog的博客-CSDN博客 可以先了解概念,然后再分析源码。匈牙利算法目的:完成最优分配,假设有六位老师和六种…

    人工智能 2023年7月27日
    099
  • Win10+YOLOv5运行记录

    运行起来有一些小问题,记录一下解决过程。 我的环境: win10+python3.7+pytorch1.9.0+cuda11.2 下载源码: 下载地址:https://github…

    人工智能 2023年7月19日
    093
  • MSS3.3一款用于数理模型统计服务的软件

    无需编程也可运用统计学模型 面向纯小白 软件均为一键操作出结果 每一种方法好好写,都有可能是一篇核心论文!!! (发论文的利器,点击推文左下角【阅读原文】获取软件+教程) Math…

    人工智能 2023年6月18日
    0103
  • Informer pytorch 代码解读(2)Decoder

    在整个informer架构中,进入到了绿色的部分,也就是decoder的部分。在这里需要的参数的维度进行下面的描述: dec_out:(32,72,512) enc_out:(32…

    人工智能 2023年7月9日
    078
  • DataFrame详解——缺失数据处理

    缺失数据处理 方法解释DataFrame.backfill([axis, inplace, limit, …])后向填充,等同于 DataFrame.fillna(me…

    人工智能 2023年7月8日
    079
  • anaconda安装配置教程

    Anaconda是一个开源的Python发行版本,包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等。其中Conda是一个开源的包、环境管理器,…

    人工智能 2023年7月21日
    068
  • 鼠标和滚轮事件

    QMouseEvent(鼠标事件) 在小组件内按下或释放鼠标按钮或移动鼠标光标时,会发生鼠标事件。 常用的函数: button()返回造成事件的按键buttons()返回造成事件的…

    人工智能 2023年6月29日
    081
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球