7:OpenCV—图像形态学处理

news2025/6/2 9:59:41

OpenCV的形态学操作(对象图像进行处理)

包括图像的**腐蚀**、**膨胀**、**开**、**闭**、**形态学梯度、顶帽、黑帽、分支主题、结构元素**等操作。

1.1、膨胀

用3×3的核去扫描二值图像,当核与图像中的前景像素(值为1的像素)有**交集**时,则将二值图像中对应的卷积核中心位置的像素值置为1。

拓展:卷积核可以**为任意形状(除1×1)**,且重置点可以选用卷积核中的**任意位置**,有‘**交集‘**就对重置点位置像素置1。

1.2、腐蚀

​ 用3×3的核去扫描二值图像,仅当核的与前景像素有**完全重合区域**时,将二值图像中对应的卷积核中心位置的像素保留,其余情况下,将中心位置的像素置0。

​ 拓展:卷积核可以**为任意形状**,且**重置点**可以选用卷积核中的**任意位置。**

膨胀与腐蚀的区别:膨胀只要**有交集就触发**,而腐蚀**必须是重置点与前景像素有完全重合区域才保留**。

1.3、开与闭

​ 开:腐蚀再膨胀,去除微小干扰块。

闭:膨胀再腐蚀,填充闭合区域。

1.4、形态学梯度

​ 内梯度:原图 - 腐蚀图

​ 外梯度:膨胀图 - 原图

​ 这里opencv只能直接实现基本梯度,在使用API:morphologyEx 时,调用MORPH_GRADIENT方法即可。

​ 内梯度、外梯度没有直接的API,一般通过已有API间接实现。

1.5、其余形态学操作

顶帽:原图 - 开操作后的图

黑帽:闭操作后的图 - 原图

注:顶帽和黑帽操作用于**获取图像**中的**微小细节**。

击中击不中: 通过特定模板,仅当输入的图像中,**有与模板一模一样的块**时,被击中的输入图像区域才会被保留。

使用API:**morphologyEx** 时,分别调用M**ORPH_TOPHAT 、MORPH_BLACKHAT、MORPH_HITMISS**方法即可实现。

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

  • src:输入图像,图像的通道数可以是任意的,但是图像的数据类型必须是CV_8U,CV_16U,CV_16S,CV_32F或CV_64F之一。
  • dst:形态学操作后的输出图像,与输入图像具有相同的尺寸和数据类型。
  • op:形态学操作类型的标志,可以选择的标志及含义在表6-6中给出。
  • kernel:结构元素,可以自己生成,也可以用getStructuringElement()函数生成。
  • anchor:中心点在结构元素中的位置,默认参数为结构元素的几何中心点
  • iterations:处理的次数
  • borderType:像素外推法选择标志,取值范围在表3-5中给出。默认参数为BORDER_DEFAULT,表示不包含边界值倒序填充。
  • borderValue:使用边界不变外推法时的边界值。

该函数根据结构元素对输入图像进行多种形态学操作,在处理多通道图像时每个通道独立进行处理。
函数的第一个参数为待形态学处理的图像,图像通道数可以是任意的,但是图像的数据类型必须是CV_8U,CV_16U,CV_16S,CV_32F或CV_64F之一。
函数第二个参数为形态学处理后的输出图像,与输入图像具有相同的尺寸和数据类型。
函数第三个参数是形态学操作类型的选择标志,可以选择的形态学操作类型有开运算、闭运算、形态学梯度、顶帽运算、黑帽运算以及击中击不中变换,详细的参数在表6-6给出。
函数第四个和第五个参数都是与结构元素相关的参数,第四个参数为结构元素,使用的结构元素尺寸越大效果越明显,第四个参数为结构元素的中心位置,第五个参数的默认值为Point(-1,-1),表示结构元素的几何中心处为结构元素的中心点。
函数第六个参数是使用结构元素处理的次数,处理次数越多效果越明显。
函数第七个参数是图像像素外推法的选择标志,
第八个参数为使用边界不变外推法时的边界值,这两个参数对图像中主要部分的形态学操作没有影响,因此在多数情况下使用默认值即可。

测试代码


#include <iostream>
#include <opencv2/opencv.hpp>
#include <QDebug>

using namespace cv;
using namespace std;

int main()
{
    //用于验证形态学应用的二值化矩阵
    Mat src = (Mat_<uchar>(9, 12) << 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 0,
    0, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0,
    0, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0,
    0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0,
    0, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0,
    0, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 0,
    0, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    namedWindow("src", WINDOW_NORMAL);  //可以自由调节显示图像的尺寸
    imshow("src", src);
    // 创建3X3矩形核元素
    Mat kernel = getStructuringElement(0, Size(3,3));

    // 对象矩阵进行膨胀操作
    Mat dilateImg;
    morphologyEx(src, dilateImg, MORPH_DILATE, kernel);
    namedWindow("dilateWd", WINDOW_NORMAL);  //可以自由调节显示图像的尺寸
    imshow("dilateWd", dilateImg);

    // 对象矩阵进行腐蚀操作
    Mat erodeImg;
    morphologyEx(src, erodeImg, MORPH_ERODE, kernel);
    namedWindow("erodeWd", WINDOW_NORMAL);  //可以自由调节显示图像的尺寸
    imshow("erodeWd", erodeImg);

    // 对象矩阵进行开操作
    Mat openImg;
    morphologyEx(src, openImg, MORPH_OPEN, kernel);
    namedWindow("openWd", WINDOW_NORMAL);  //可以自由调节显示图像的尺寸
    imshow("openWd", openImg);

    // 对象矩阵进行闭操作
    Mat closeImg;
    morphologyEx(src, closeImg, MORPH_CLOSE, kernel);
    namedWindow("closeWd", WINDOW_NORMAL);  //可以自由调节显示图像的尺寸
    imshow("closeWd", closeImg);

    // 对象矩阵进行开操作
    Mat topHatImg;
    morphologyEx(src, topHatImg, MORPH_TOPHAT, kernel);
    namedWindow("topHatWd", WINDOW_NORMAL);  //可以自由调节显示图像的尺寸
    imshow("topHatWd", topHatImg);

    // 对象矩阵进行闭操作
    Mat blackImg;
    morphologyEx(src, blackImg, MORPH_BLACKHAT, kernel);
    namedWindow("blackWd", WINDOW_NORMAL);  //可以自由调节显示图像的尺寸
    imshow("blackWd", blackImg);

    // 对象矩阵进行梯度运算操作
    Mat gradientImg;
    morphologyEx(src, gradientImg, MORPH_GRADIENT, kernel);
    namedWindow("gradientWd", WINDOW_NORMAL);  //可以自由调节显示图像的尺寸
    imshow("gradientWd", gradientImg);

    waitKey(0);

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2393591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

远控安全金标准,ToDesk、向日葵、网易UU安全功能盘点,是否能攻破防线

目录 一、引言二、设备授权管理2.1、二次验证2.2、访问权限设置2.3、黑/白名单功能 三、远程连接与数据传输3.1、身份认证强度3.2、数据传输加密能力 四、隐私安全功能4.1、隐私屏/黑屏功能对比4.2、风险提醒消息 五、主动防诈保护5.1、24小时防诈等待期5.2、金融类窗口识别与隐…

终端没有5G图标-不支持特定NSA频段组合

某样机没有5G图标&#xff0c;而对比机有5G图标。 step1&#xff1a; 对比机工作在5G NSA上 从android日志可以看到终端工作在b28n78的NSA双载波下 05-06 14:38:51.993097 1582 1661 D RILJ : [UNSL]< UNSOL_PHYSICAL_CHANNEL_CONFIG [ { mConnectionStatusPrimaryS…

第42节:模型优化与部署:Web服务部署(Flask, FastAPI)

1. 引言 在现代人工智能和机器学习应用中,模型的开发只是整个流程的一部分。 将训练好的模型有效地部署为可访问的Web服务,使其能够处理实际请求并返回预测结果,是模型价值实现的关键环节。Python生态系统提供了多种轻量级Web框架,其中Flask和FastAPI是目前最受欢迎的选择…

pikachu通关教程-RCE

目录 RCE(remote command/code execute)概述: exec "ping" 管道符 乱码问题 RCE(remote command/code execute)概述: RCE漏洞&#xff0c;可以让攻击者直接向后台服务器远程注入操作系统命令或者代码&#xff0c;从而控制后台系统 分为远程代码和远程命令两种.当…

MyBatisPlus--快速入门

MyBatisPlus介绍 从名字中就可以感觉到MybatisPlus与MyBatis之间的渊源&#xff0c;而MyBatis是一个非常流行的持久层框架&#xff0c;主要来做数据库的增删改查&#xff0c;而MyBatisPlus这种命名方式让人不得不往MyBatis的升级版去联想&#xff0c;事实也确实如此&#xff0…

鸿蒙 HarmonyOS - SideBarContainer 组件自学指南

在日常开发中&#xff0c;如果你有类似「左侧导航 右侧内容」的布局需求&#xff0c;比如后台管理界面、文件管理器、设置页等&#xff0c;​​SideBarContainer​​ 是非常值得掌握的组件。它自带侧边栏和主内容区的分离机制&#xff0c;还支持折叠、拖拽、控制按钮和多种显示…

C++ list基础概念、list初始化、list赋值操作、list大小操作、list数据插入

list基础概念&#xff1a;list中的每一部分是一个Node&#xff0c;由三部分组成&#xff1a;val、next、prev&#xff08;指向上一个节点的指针&#xff09; list初始化的代码&#xff0c;见下 #include<iostream> #include<list>using namespace std;void printL…

【Linux 学习计划】-- 命令行参数 | 环境变量

目录 命令行参数 环境变量 环境变量的本质是什么&#xff1f; 相关配置文件 修改环境变量的相关操作 代码获取env —— environ 内建命令 结语 命令行参数 试想一下&#xff0c;我们的main函数&#xff0c;也是一个函数&#xff0c;那么我们的main函数有没有参数呢&am…

服务器Docker容器创建与VScode远程连接SSH使用

一、拉取容器 1、win r 输入cmd打开终端命令行 2、终端输入 ping 192.168.xx.xxx 查看是否连接到服务器。如输出显示“字节 时间 TTL”等如下界面&#xff0c;则连接成功。否则输出“请求超时” 如果不能连接&#xff0c;则需要修改设备的IP&#xff0c;需要在设置-网络和In…

LiveQing 视频点播流媒体 RTMP 推流服务功能:搭建 RTMP 视频流媒体服务详细指南

LiveQing视频点播流媒体RTMP推流服务功能&#xff1a;搭建RTMP视频流媒体服务详细指南 一、流媒体服务搭建二、推流工具准备三、创建鉴权直播间四、获取推流地址五、配置OBS推流六、推流及播放七、获取播放地址7.1 页面查看视频源地址7.2 接口查询 八、相关问题解决8.1 大疆无人…

LeetCode 高频 SQL 50 题(基础版)之 【连接】部分 · 下

前五道题&#xff1a;LeetCode 高频 SQL 50 题&#xff08;基础版&#xff09;之 【连接】部分 上 题目&#xff1a;577. 员工奖金 题解&#xff1a; select r.name,b.bonus from Employee r left join Bonus b on r.empIdb.empId where b.bonus <1000 or b.bonus is nul…

【正点原子STM32】RS485串行通信标准(串口基础协议 和 MODBUS协议、总线连接、通信电路、通信波形图、RS485相关HAL库驱动、RS485配置步骤、)

一、RS485介绍 二、RS485相关HAL库驱动介绍 三、RS485配置步骤 四、编程实战 五、总结 串口、 UART、TTL、RS232、RS422、RS485关系 串口、UART、TTL、RS232、RS422和RS485之间的关系可以如此理解&#xff1a; 串口&#xff1a;是一个广义术语&#xff0c;通常指的是采用串行通…

在力扣刷题中触摸算法的温度

在代码的世界里&#xff0c;每一道力扣题目都是一扇通往未知的门。当我推开这些门&#xff0c;与内置求和函数、二进制位运算、辗转相减思想以及链表结构相遇时&#xff0c;才真正触摸到算法的温度 —— 那是一种理性与智慧交织的炽热&#xff0c;也是思维不断淬炼的滚烫。​ 最…

外部访问可视化监控 Grafana (Windows版本)

Grafana 是一款通用&#xff0c;美观的&#xff0c;强大的可视化监控指标的展示工具。可以将不同的数据源数据以图形化的方式展示。它支持多种数据源&#xff0c;如 Prometheus 等&#xff0c;可以满足不同的需求。也可以通过插件和 API 进行扩展满足各种需求&#xff0c;…

通用的防御框架,用于抵御(多模态)大型语言模型的越狱攻击

大家读完觉得有帮助记得关注&#xff01;&#xff01;&#xff01; 摘要 尽管&#xff08;多模态&#xff09;大型语言模型&#xff08;LLMs&#xff09;因其卓越的能力而受到广泛关注&#xff0c;但它们仍然容易受到越狱攻击。已经提出了各种防御方法来防御越狱攻击&#xff…

新能源汽车电控系统的精准守护者PKDV5355高压差分探头

在新能源汽车的"心脏"——电控系统中&#xff0c;每一次电流的精准切换都关乎车辆的性能与安全。PRBTEK PKDV5355高压差分探头就像一位经验丰富的"汽车医生"&#xff0c;帮助工程师们精准捕捉IGBT模块的每一次"心跳"&#xff0c;确保电驱系统健康…

C# 导出word 插入公式问题

最近遇到了一个问题&#xff0c;下载一个文档时需要下载word可编辑的公式。找了很久终于找到了一种解决办法。下面是以C#代码来实现在Word中插入公式的功能。 目录 一、引入dll程序集文件1、通过 NuGet 引入dll&#xff08;2种方法&#xff09;的方法&#xff1a;2、手动添加d…

Mac安装配置InfluxDB,InfluxDB快速入门,Java集成InfluxDB

1. 与MySQL的比较 InfluxDBMySQL解释BucketDatabase数据库MeasurementTable表TagIndexed Column索引列FieldColumn普通列PointRow每行数据 2. 安装FluxDB brew update默认安装 2.x的版本 brew install influxdb查看influxdb版本 influxd version # InfluxDB 2.7.11 (git: …

手撕Java+硅基流动实现MCP服务器教程

手撕Java硅基流动实现MCP服务器教程 一、MCP协议核心概念 MCP是什么 MCP 是 Anthropic (Claude) 主导发布的一个开放的、通用的、有共识的协议标准。 ● MCP 是一个标准协议&#xff0c;就像给 AI 大模型装了一个 “万能接口”&#xff0c;让 AI 模型能够与不同的数据源和工…

EasyRTC嵌入式音视频通信SDK助力1v1实时音视频通话全场景应用

一、方案概述​ 在数字化通信需求日益增长的今天&#xff0c;EasyRTC作为一款全平台互通的实时视频通话方案&#xff0c;实现了设备与平台间的跨端连接。它支持微信小程序、APP、PC客户端等多端协同&#xff0c;开发者通过该方案可快速搭建1v1实时音视频通信系统&#xff0c;适…