【OpenCV基础】形态学(开操作、闭操作、形态学梯度、顶帽、黑帽)

2023-10-22 09:30

本文主要是介绍【OpenCV基础】形态学(开操作、闭操作、形态学梯度、顶帽、黑帽),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处

文章目录

    • 一、形态学介绍
    • 二、API-morphologyEx
    • 三、全部代码
    • 四、效果展示


一、形态学介绍

📢 morphology:形态学,morphologyEx=morphology Expend。MORPH为形态学缩写
形态学是数学图像处理领域中一种重要的图像处理技术,它关注图像的形状和结构特征,以及用于改变和分析图像形态的数学操作和算法。

📢 在形态学中,图像被看作是一个由像素组成的二维数组或矩阵。形态学操作基于结构元素(structuring element),通过对图像进行腐蚀(erosion)和膨胀(dilation)这两种基本操作来改变图像的形状。

MORPH_CLOSE形态学闭操作
操作:先腐蚀后膨胀
操作:先膨胀后腐蚀
形态学梯度:膨胀减去腐蚀。
顶帽:原图像与开操作图像之间的差值图像。
黑帽:闭操作图像与原图像之间的差值图像。

二、API-morphologyEx

morphologyEx是形态学的函数原型,其参数如下:

void 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() );

参数含义如下;

(1)InputArray类型的src,输入图像。通道数可以任意,但深度应为CV_8U、CV_16U、CV_16S、CV_32F或CV_64F之一。

(2)OutputArray类型的dst,即目标图像,与输入图像有相同的尺寸和类型。

(3)int类型的op,形态学操作的类型,请参见cv::MorphTypes

(4)InputArray类型的kernel,用于膨胀的结构元素;如果elemenat=Mat(),则使用3 x 3矩形结构元素。可以使用getStructuringElement创建内核。

(5)Point类型的anchor:锚定在元素中的位置;默认值(-1,-1)表示锚定在元素中心。

(6)int类型的iterations:应用膨胀的次数。

(7)int类型的borderType:像素外推方法,参见cv::BorderTypes。

注意:在使用过程中,只需要设置前四个参数,后面的参数默认即可。

三、全部代码

#include <opencv2\opencv.hpp>
#include<iostream>using namespace std;
using namespace cv;int main()
{Mat src, dst;src = imread("D:/images/box.jpg");if (src.empty()){cout << "could not load image !";return -1;}imshow("原图", src);
//getStructuringElement:构造结构元素,MORPH_RECT:表示矩形结构区域,长和宽尺寸都为7.Mat kernel = getStructuringElement(MORPH_RECT, Size(7, 7), Point(-1, -1));//闭操作morphologyEx(src, dst, MORPH_CLOSE, kernel);imshow("闭操作", dst);//开操作morphologyEx(src, dst, MORPH_OPEN, kernel);imshow("开操作", dst); //形态学梯度morphologyEx(src, dst, MORPH_GRADIENT, kernel);imshow("gradient", dst);//顶帽morphologyEx(src, dst, MORPH_TOPHAT, kernel);imshow("顶帽", dst);//黑帽morphologyEx(src, dst, MORPH_BLACKHAT, kernel);imshow("黑帽", dst);waitKey(0);return 0;
}

四、效果展示

在这里插入图片描述
在这里插入图片描述

这篇关于【OpenCV基础】形态学(开操作、闭操作、形态学梯度、顶帽、黑帽)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/260577

相关文章

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We