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

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

目录

概述:

morphologyEX()函数

一、开运算(分开)

1、基础理论

1、作用:

2、代码

3、效果

二、闭运算(封闭)

1、基础理论

1、作用

2、过程

2、代码

3、效果

总代码

参考资料:


概述:

运算类型

操作

目的

开运算

先腐蚀再膨胀

可在纤细点出分离物体。有助于消除噪音

闭运算

先膨胀后腐蚀

用于排除前景对象中的小孔或对象上的小黑点

形态学梯度

膨胀图与腐蚀图之差

用于保留目标物体的边缘轮廓

顶帽

原图与开运算图之差

分离比邻近点亮的斑块,用于突出原图像中比周围亮的区域

黑帽

闭运算图-原图像

分离比邻近点暗的斑块,突出原图像中比周围暗的区域

形态学处理往往是在阈值处理之后才进行的,因为当图像被转化为二值图以后,这个时候只有黑白两者颜色,然后再进行形态学处理是效果最好的

morphologyEX()函数

morphologyEx(Mat src, Mat dst, int op, Mat kernel, Point anchor, int iterations, int borderType, Scalar borderValue)

参数介绍:

第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。图像位深应该为以下五种之一:CV_8U, CV_16U,CV_16S, CV_32F 或CV_64F。
第二个参数,OutputArray类型的dst,即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型。
第三个参数,int类型的op,表示形态学运算的类型,可以是如下之一的标识符:  

enum MorphTypes{MORPH_ERODE    = 0, //腐蚀MORPH_DILATE   = 1, //膨胀MORPH_OPEN     = 2, //开操作MORPH_CLOSE    = 3, //闭操作MORPH_GRADIENT = 4, //梯度操作MORPH_TOPHAT   = 5, //顶帽操作MORPH_BLACKHAT = 6, //黑帽操作MORPH_HITMISS  = 7  
};

第四个参数,InputArray类型的kernel,形态学运算的内核。

一、开运算(分开)

1、基础理论

1、作用:

1、分离物体,消除小区域。

2、消除噪点消除小干扰块,而不影响原来的图像。

2、过程:

腐蚀运算,再膨胀运算(看上去把细微连在一起的两块目标分开了)

 (1)腐蚀

 (2)膨胀

2、代码

C++:

//开运算
void Open()
{Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11));  //创建结构元//								  矩形卷积核		尺寸为(19, 19)宽高morphologyEx(img, dst, MORPH_OPEN, kernel, Point(-1, -1));     // 形态学处理--开运算//			原图  新图  开运算		卷积核  锚点				  imshow("新图", dst);               // 显示形态学处理后的效果
}

python:

# 开运算(先腐后膨)
def Open():open = cv2.morphologyEx(img, cv2.MORPH_OPEN, (7, 7), iterations=5)#                            类型             卷积核大小    迭代次数cv2.imshow('open', open)

3、效果

 

二、闭运算(封闭)

1、基础理论

1、作用

消除闭合区域内的空洞,填充闭合区域。

2、过程

膨胀运算,再腐蚀运算(看上去将两个细微连接的图块封闭在一起)

(1)膨胀

 (2)腐蚀

2、代码

C++:

//闭运算
void Close()
{Mat kernel = getStructuringElement(MORPH_RECT, Size(19, 19));  //创建结构元//								  矩形卷积核		尺寸为(19, 19)宽高morphologyEx(img, dst, MORPH_CLOSE, kernel, Point(-1, -1));     // 形态学处理--开运算//			原图  新图  闭运算		卷积核  锚点				  imshow("闭运算", dst);               // 显示形态学处理后的效果
}

python:

# 闭运算(先膨后腐)
def Close():close = cv2.morphologyEx(img, cv2.MORPH_CLOSE, (7, 7), iterations=5)#                            类型             卷积核大小    迭代次数cv2.imshow('close', close)

3、效果

 

 

                                                        

总代码

C++:

//开运算与闭运算(形态学)
#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;Mat img, dst;//图像初始化
void Image_Init()
{img = imread("Resource/test5.jpg");dst = Mat::zeros(img.size(), img.type());if (img.empty()){printf("图像加载失败");exit(0);}
}//开运算
void Open()
{Mat kernel = getStructuringElement(MORPH_RECT, Size(19, 19));  //创建结构元//															矩形卷积核		尺寸为(11,11)宽高morphologyEx(img, dst, MORPH_OPEN, kernel, Point(-1, -1));     // 形态学处理--开运算//						原图  新图  开运算				 卷积核  锚点				  imshow("开运算", dst);               // 显示形态学处理后的效果
}//闭运算
void Close()
{Mat kernel = getStructuringElement(MORPH_RECT, Size(19, 19));  //创建结构元//															矩形卷积核		尺寸为(11,11)宽高morphologyEx(img, dst, MORPH_CLOSE, kernel, Point(-1, -1));     // 形态学处理--开运算//						原图  新图  闭运算				 卷积核  锚点				  imshow("闭运算", dst);               // 显示形态学处理后的效果
}//显示图像
void Show()
{imshow("原图", img);
}int main()
{Image_Init();								//图像初始化Open();										//开运算Close();									//闭运算Show();										//显示原图像waitKey(0);return 0;
}

python:

# 形态学(膨胀、腐蚀、开闭运算、顶帽与底帽)
import cv2# 膨胀
def Dilate():# 膨胀dilate = cv2.dilate(img, kernel=(7, 7), iterations=1)#                        卷积核大小      迭代次数cv2.imshow("dilate", dilate)# 腐蚀
def Enrode():# 腐蚀erode = cv2.erode(img, kernel=(7, 7), iterations=5)#                        卷积核大小      迭代次数cv2.imshow("erode", erode)# 开运算(先腐后膨)
def Open():open = cv2.morphologyEx(img, cv2.MORPH_OPEN, (7, 7), iterations=5)#                            类型             卷积核大小    迭代次数cv2.imshow('open', open)# 闭运算(先膨后腐)
def Close():close = cv2.morphologyEx(img, cv2.MORPH_CLOSE, (7, 7), iterations=5)#                            类型             卷积核大小    迭代次数cv2.imshow('close', close)# 顶帽(原-开)
def TopHat():tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, (7, 7), iterations=5)
#                                   类型              卷积核   迭代次数cv2.imshow('TopHat', tophat)# 底帽(原-闭)
def BlackHat():blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT,  (7, 7), iterations=5)
#                                    类型                  卷积核   迭代次数cv2.imshow('BlackHat', blackhat)if __name__ == '__main__':# 读取图片img = cv2.imread("Resource/test5.jpg")cv2.imshow("img", img)Dilate()        #膨胀Enrode()        #腐蚀Open()          #开运算Close()         #闭运算TopHat()        #顶帽运算BlackHat()      #底帽运算cv2.waitKey(0)

参考资料:

https://blog.csdn.net/dujuancao11/article/details/109339686?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162855777116780271518767%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162855777116780271518767&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-17-109339686.pc_search_result_control_group&utm_term=%E5%BD%A2%E6%80%81%E5%AD%A6%E5%BC%80%E9%97%AD%E8%BF%90%E7%AE%97&spm=1018.2226.3001.4187

https://blog.csdn.net/weixin_41695564/article/details/79935028 

https://www.jianshu.com/p/ee72f5215e07


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

相关文章

开运算—闭运算

转载&#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…

wxPython:wx.Font详细解释用法

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

小程序 - wxs

wxs&#xff1a; 在小程序里写函数表达式&#xff0c;做数据处理 官方文档 wxs WXS&#xff08;WeiXin Script&#xff09;是小程序的一套脚本语言&#xff0c;结合 WXML&#xff0c;可以构建出页面的结构。 WXS 与 JavaScript 是不同的语言&#xff0c;有自己的语法&#x…

如何在小程序的wxml中书写函数逻辑,wxs的使用

在小程序wxml的页面中我们可以使用{{}}内部来书写简单的js表达式&#xff0c;如三目运算符等&#xff0c;但是对于稍微复杂一点的逻辑我们就需要用函数来解决&#xff0c;如果写在js文件中有些繁琐还需要绑定数据等&#xff0c;此时wxs就配上了用场 wxs只支持ES5&#xff01;&…