【Emgu CV教程】9.5、形态学常用操作之形态学梯度
文章目录
- 一、相关概念
- 1.什么叫形态学梯度
- 2.形态学梯度的函数
- 二、演示
- 1.原始素材
- 2.代码
- 3.运行结果
一、相关概念
1.什么叫形态学梯度
形态学梯度,就是用膨胀的原始图像减去腐蚀的原始图像,所以它的特性就是去除前景物体的内部区域,只得到前景物体的白色轮廓。一般的用处就是获取二值化图形内物体的轮廓。
2.形态学梯度的函数
Emgu CV中,形态学梯度的函数定义如下:
public static void MorphologyEx(IInputArray src, // 输入图像IOutputArray dst, // 输入图像MorphOp Gradient, // 操作方式,形态学梯度是MorphOp.GradientIInputArray kernel, // 结构元素大小Point anchor, // 锚点位置,默认为中心new Point(-1, -1)int iterations, // 膨胀操作迭代次数BorderType borderType, // 边界填充方式,一般取默认MCvScalar borderValue // 边界值,使用时一般写成new MCvScalar()
)
二、演示
1.原始素材
原始素材srcMat如下图:

2.代码
Emgu CV形态学梯度运算演示代码如下:
Mat tempMat = srcMat.Clone();
Mat gray = new Mat();
Mat dstMat = new Mat();
int kernelX = Convert.ToInt16(TextBoxX.Text.Trim().ToString()); // structuring element结构元素 或者 kernel 内核的X值,水平方向
int kernelY = Convert.ToInt16(TextBoxY.Text.Trim().ToString()); // structuring element结构元素 或者 kernel 内核的X值,垂直方向
int iterations = Convert.ToInt16(TextBoxIterations.Text.Trim().ToString()); // 需要执行运算的次数// 要转成灰度图
CvInvoke.CvtColor(tempMat, gray, ColorConversion.Bgr2Gray);// 定义结构元素,其中元素的形状是矩形,size大小由两个文本框决定,默认锚点new Point(-1,-1)是指在中心
Mat element = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new System.Drawing.Size(kernelX, kernelY), new System.Drawing.Point(-1, -1));// 闭运算,其中锚点位置new Point(-1, -1)代表中心
CvInvoke.MorphologyEx(gray, dstMat, MorphOp.Gradient, element, new System.Drawing.Point(-1, -1), iterations, BorderType.Default, new MCvScalar());
CvInvoke.Imshow("Gray, " + gray.Size.ToString(), gray);
CvInvoke.Imshow("Close, " + dstMat.Size.ToString(), dstMat);
注意哈,结构元素的内核要对水平方向和垂直方向分别定义。
3.运行结果
假设kernelX = 3,kernelY = 3,iterations = 1, 形态学梯度运算结果如下所示:

如果仅仅是需要获取物体轮廓,结构元素是 3 * 3 大小就足够了。如果 kernelX = 1,kernelY =1,iterations = 1, 其灰度图和形态学梯度运算结果如下所示:

为什么形态学梯度图是黑色呢,其实很简单:结构元素内核是 1 * 1,所以膨胀后的图像和腐蚀后的图像是相同的,再相减当然结果都是0了 如果假设kernelX = 19,kernelY =1,iterations = 1 ,输出的图像是这样:

结果很好理解:
- 以垂直的直线为例,因为kernelX = 19,水平方向膨胀的多,腐蚀的也多;kernelY =1,垂直方向膨胀和腐蚀的结果是相同的。所以形态学梯度计算的结果就是垂直轮廓变得更宽。
- 以水平直线为例,因为kernelX = 19,水平方向膨胀-腐蚀,水平方向轮廓会多出来19个像素;kernelY =1,垂直方向膨胀和腐蚀的结果是相同的。所以形态学梯度计算的结果就是水平轮廓消失了,或者说只剩两端各19个像素那么长。
原创不易,请勿抄袭。共同进步,相互学习。
相关文章:
【Emgu CV教程】9.5、形态学常用操作之形态学梯度
文章目录 一、相关概念1.什么叫形态学梯度2.形态学梯度的函数 二、演示1.原始素材2.代码3.运行结果 一、相关概念 1.什么叫形态学梯度 形态学梯度,就是用膨胀的原始图像减去腐蚀的原始图像,所以它的特性就是去除前景物体的内部区域,只得到前…...
算法笔记之蓝桥杯pat系统备考(2)
算法笔记之蓝桥杯&pat系统备考(1) 文章目录 五、数学问题5.2最大公约数和最小公倍数5.2.1最大公约数5.2.2最小公倍数 5.3分数的四则运算5.3.1分数的表示与化简5.3.2分数的四则运算5.3.3分数的输出 5.4素数(质数)5.4.1[素数的…...
基于SpringBoot+Druid实现多数据源:注解+编程式
前言 本博客姊妹篇 基于SpringBootDruid实现多数据源:原生注解式基于SpringBootDruid实现多数据源:注解编程式基于SpringBootDruid实现多数据源:baomidou多数据源 一、功能描述 配置方式:配置文件中配置默认数据源,…...
已解决org.apache.zookeeper.KeeperException.BadVersionException异常的正确解冲方法,亲测有效!!!
已解决org.apache.zookeeper.KeeperException.BadVersionException异常的正确解冲方法,亲测有效!!! 目录 问题分析 报错原因 解决思路 解决方法 总结 博主v:XiaoMing_Java 问题分析 在使用Apache ZooKeeper进行…...
数据结构:堆
堆的概念 1.堆是一个完全二叉树 2.小堆(任何一个父亲<孩子),大堆(任何一个父亲>孩子) 堆的结构 物理结构:数组 逻辑结构:二叉树 #pragma once #include<assert.h> #include<iostream> typedef int HPDataType; typedef struct Heap {HPDataType* _a;int…...
CSS中三栏布局的实现
三栏布局一般指的是页面中一共有三栏,左右两栏宽度固定,中间自适应的布局,三栏布局的具体实现: 利用绝对定位,左右两栏设置为绝对定位,中间设置对应方向大小的margin的值。 .outer {position: relative;h…...
Linux搭建我的世界(MC)整合包服务器,All the Mods 9(ATM9)整合包开服教程
Linux使用MCSM面板搭建我的世界(Minecraft)整合包服务器,MC开服教程,All the Mods 9(ATM9)整合包搭建服务器的教程。 本教程使用Docker来运行mc服,可以方便切换不同Java版本,方便安装多个mc服版本。 视频教程:https:…...
让数据在业务间高效流转,镜舟科技与NineData完成产品兼容互认
近日,镜舟科技与NineData完成产品兼容测试。在经过联合测试后,镜舟科技旗下产品与NineData云原生智能数据管理平台完全兼容,整体运行高效稳定。 镜舟科技致力于帮助中国企业构建卓越的数据分析系统,打造独具竞争力的“数据护城河”…...
2.1HTML5基本结构
HTML5实际上不算是一种编程语言,而是一种标记语言。HTML5文件是由一系列成对出现的元素标签嵌套组合而成,这些标签以<元素名>的形式出现,用于标记文本内容的含义。浏览器通过元素标签解析文本内容并将结果显示在网页上,而元…...
设置浏览器显示小于12px以下字体
问题 我们在项目开发过程中有时候会遇到设计师给的小于12px的字体,IE、火狐浏览器、移动端等小于12px的字号大小还是可以正常显示的,但是谷歌浏览器上显示字体最小为12px,css设置font-size:10px,运行代码显示结果仍然…...
web蓝桥杯真题:成语学习
代码: //TODO 点击文字后,在idiom从左到右第一个空的位置加上改文字 getSingleWord(val) {let index this.idiom.indexOf() //从左往右查询空字符串this.$set(this.idiom, index, val) //响应式更新 },// TODO 校验成语是否输入正确答案 confirm…...
外包干了5天,技术明显退步。。。。。
先说一下自己的情况,本科生,19年通过校招进入南京某软件公司,干了接近2年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…...
Vue:自定义消息通知组件
一、效果描述 在JS中使用一个Message函数,弹出一个自定义的消息框。 效果体验:缓若江海凝清光 二、实现方式 1.新建一个消息组件 2.新建一个js文件,新建一个需要导出函数 3.在函数中新建一个Vue实例,并将消息组件挂载上去。…...
2023 收入最高的十大编程语言
本期共享的是 —— 地球上目前已知超过 200 种可用的编程语言,了解哪些语言在 2023 为开发者提供更高的薪水至关重要。 过去一年里,我分析了来自地球各地超过 1000 万个开发职位空缺,辅助我们了解市场,以及人气最高和收入最高的语…...
Github 2024-03-11 开源项目周报 Top15
根据Github Trendings的统计,本周(2024-03-11统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4TypeScript项目3Jupyter Notebook项目3C#项目1HTML项目1CSS项目1Dart项目1Lua项目1Shell项目1Rust…...
【DAY10 软考中级备考笔记】数据结构 图
数据结构 图 3月11日 – 天气:晴 晚上无线网络突然不能用了,花费好久弄这个,耽误了一些时间 1. 图的定义 这里需要注意完全图的定义,以及完全图的边数 这里需要注意连通图和连通分量的概念。 2. 图的存储结构 图有两种存储结构&a…...
java-ssm-jsp基于java的餐厅点餐系统的设计与实现
java-ssm-jsp基于java的餐厅点餐系统的设计与实现 获取源码——》公主号:计算机专业毕设大全...
蓝桥杯(1):python排序
1 基础 1.1 输出 1.1.1 去掉输出的空格 print("Hello","World",123,sep"") print("hello",world,123,sep) print(hello,world,123) #输出结果 #HelloWorld123 #helloworld123 #hello world 123 1.1.2 以不同的方式结尾 print(&quo…...
SpringMVC请求、响应和拦截器的使用
SpringMVC请求 RequestMapping注解 RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系 RequestMapping注解可以作用在方法和类上 1. 作用在类上:第一级的访问目录 2. 作用在方法上:第二级的访问目录 3. 细节:路径可以不编写…...
基于springboot+layui仓库管理系统设计和实现
基于 java springbootlayui仓库管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取…...
GLM-4v-9b效果展示:直播带货截图→话术分析+转化点提炼
GLM-4v-9b效果展示:直播带货截图→话术分析转化点提炼 1. 模型能力概览 GLM-4v-9b是智谱AI在2024年开源的多模态视觉-语言模型,拥有90亿参数。这个模型最大的特点是能够同时理解图片和文字,支持中英文多轮对话,在11201120高分辨…...
YOLOv12镜像应用案例:如何快速构建自动驾驶感知原型系统
YOLOv12镜像应用案例:如何快速构建自动驾驶感知原型系统 1. 自动驾驶感知系统的技术挑战 自动驾驶技术正在重塑交通出行的未来,而感知系统作为"车辆的眼睛",其性能直接影响整个系统的安全性和可靠性。传统方案面临三大核心挑战&a…...
手把手教你搭建PaddleOCR开发环境:从CUDA配置到模型验证
1. 环境准备:从零搭建PaddleOCR开发环境 最近在做一个票据识别的项目,需要用到OCR技术。对比了几种开源方案后,发现PaddleOCR不仅识别准确率高,而且对中文支持特别好。但在搭建环境时踩了不少坑,特别是CUDA和cuDNN的版…...
【SOC锁死SPORT、ECO不生效?10年VCU老兵:模式管理不是切个开关那么简单!】
SOC锁死SPORT、ECO不生效?10年VCU老兵:模式管理不是切个开关那么简单! 副标题:10年老兵深度拆解 | 标定测试故障产品定义 作者 新能源汽车研发测试 10 年高级工程师 关键词 #VCU车辆模式管理#驾驶模式切换逻辑#SOC阈值标定#扭矩Map#VCU测试标定#新能源三电测试#整车能…...
开源工具:IDM Activation Script彻底解决激活弹窗问题的技术方案
开源工具:IDM Activation Script彻底解决激活弹窗问题的技术方案 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script Internet Download Manager…...
立创庐山派K230 RT-Smart GPIO驱动开发实战:从零构建LED控制应用
1. 庐山派K230开发板与RT-Smart系统初探 庐山派K230开发板是当前嵌入式开发领域的热门硬件平台,搭载了双核处理器架构,能够同时运行Linux和RT-Smart实时操作系统。RT-Smart作为一款轻量级实时操作系统,特别适合需要精确时序控制的嵌入式应用场…...
Deep-Live-Cam架构深度解析:构建实时AI换脸系统的技术实现与优化策略
Deep-Live-Cam架构深度解析:构建实时AI换脸系统的技术实现与优化策略 【免费下载链接】Deep-Live-Cam real time face swap and one-click video deepfake with only a single image 项目地址: https://gitcode.com/GitHub_Trending/de/Deep-Live-Cam 在数字…...
深入解析CC Switch架构:构建AI开发工具统一管理引擎
深入解析CC Switch架构:构建AI开发工具统一管理引擎 【免费下载链接】cc-switch A cross-platform desktop All-in-One assistant tool for Claude Code, Codex, OpenCode, openclaw & Gemini CLI. 项目地址: https://gitcode.com/GitHub_Trending/cc/cc-swit…...
ClaudeCode 入门详细教程,手把手带你Vibe Coding
本文使用 Mac 进行演示。主要是在安装环节有环境差异。 1. Claude Code 简介 Claude Code 是 Anthropic 推出的面向开发者的 AI 编程协作工具。Claude Code 的核心目标是理解你的整个项目,并参与到真实的编码、修改和重构过程中。Claude Code 不是一个代码生成器&…...
从零到实战:用QCustomPlot在QT中绘制动态曲线图(含OpenGL加速配置)
从零到实战:用QCustomPlot在QT中绘制动态曲线图(含OpenGL加速配置) 第一次接触QT绘图功能时,我被它的灵活性震撼到了——直到尝试绘制实时动态数据,才意识到性能优化的重要性。QCustomPlot这个轻量级库完美平衡了易用性…...
