【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和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-