DrGraph原理示教 - OpenCV 4 功能 - 形态操作

形态类型

从OpenCV图像处理基本知识来看,膨胀腐蚀操作后,还有形态操作,如开运算、闭运算、梯度、礼帽与黑帽,感觉很多,其实,本质上就是批处理操作,如
开运算:先腐蚀,再膨胀
闭运算:先膨胀,再腐蚀
这样,从一个原图,就可以得到4种结果,膨胀、腐蚀、开、闭
这4种结果,主体还是与原图差不多的,区别就在于一些噪声点(小的白点)、比较近的区域合并,有利于后续的图像分析
这些结果可以为主体,但很多地方还想看看边界或轮廓,那就需要在这些主体之间进行差值,或是减法操作,这样,结果就是边缘,就象两个大小不同的同心圆,差值后就得到圆环。
OpenCV作为一个基础的或通用的图像处理,那肯定是需要支持不同的需求,象刚说的这些主体差异,功能也是存在了,只不过采用了相应的所谓专业术语来进行称呼,如梯度、礼帽与黑帽
如,梯度 = 膨胀 - 腐蚀
正常的理解,减法嘛,肯定是大减小,直观感觉,膨胀应该比腐蚀大。但从本质上来说,膨胀与腐蚀的结果都是二值图,它的各像素点取值范围都是BYTE,各BYTE相减,结果都还是BYTE。如2-1=1,1-2=-1=0xFE。从结果来看,前者是黑色,后都是白色,也就是反相效果。
上面把膨胀与腐蚀折腾来折腾去,玩出了花,还能怎么玩?这两个再怎么组合,也不能再花了吧,如果要多来几次,那就增加一个迭代次数
但从主体而言,最原始的主体就是原图,所以可以把原图和膨胀腐蚀结果进行减法操作。直观上来说,膨胀 > 原图 > 腐蚀,所以可以这些减。但OpenCV没有直接支持这种操作的功能,如果自己想,实现一个就行了,名字就自己随便取,不象下面说的这个礼帽与黑帽,还要反应半天。
可能是觉得膨胀、原图、腐蚀相邻的差异太小,减的效果不明显,所以OpenCV支持的就是间隔差,如上面提到的
梯度 = 膨胀 - 腐蚀,而
礼帽 = 原图 - 开运算结果
黑帽 = 闭运算结果 - 原图
没有细究开运算结果、原图、闭运算结果的大小关系,从礼帽与黑帽的定义来看,猜测是闭运算结果 > 原图 > 开运算结果
爱谁谁吧

API

OpenCV中,形态操作的API函数是morphologyEx,正常理解

@param src Source image. The number of channels can be arbitrary. The depth should be one of
CV_8U, CV_16U, CV_16S, CV_32F or CV_64F.
@param dst Destination image of the same size and type as source image.
@param op Type of a morphological operation, see #MorphTypes
@param kernel Structuring element. It can be created using #getStructuringElement.
@param anchor Anchor position with the kernel. Negative values mean that the anchor is at the
kernel center.
@param iterations Number of times erosion and dilation are applied.
@param borderType Pixel extrapolation method, see #BorderTypes. #BORDER_WRAP is not supported.
@param borderValue Border value in case of a constant border. The default value has a special
meaning.
@sa  dilate, erode, getStructuringElement
@note The number of iterations is the number of times erosion or dilatation operation will be applied.
For instance, an opening operation (#MORPH_OPEN) with two iterations is equivalent to apply
successively: erode -> erode -> dilate -> dilate (and not erode -> dilate -> erode -> dilate).
 */
CV_EXPORTS_W 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() );

调用实现

// 基本 - 二值操作 - 形态」类 - 滤镜处理 - 对dstMat进行本滤镜逻辑变换处理
    int paramIndex = 0;
    int method = GetParamValue_Int(paramIndex++);           // 0: 类型 - 开;闭;渐变;Top Hat;黑帽
    int kernelShape = GetParamValue_Int(paramIndex++);     // 1: 内核形状 - RECT;CROSS;ELLIPSE
    int borderType = GetParamValue_Int(paramIndex++);      // 2: 边框类型
    if(borderType == 1)
        borderType = BORDER_DEFAULT;
    bool ISOLATED = GetParamValue_Bool(paramIndex++);        // 3 - 边框类型的 ISOLATED 标志
    if(ISOLATED)
        borderType = borderType | BORDER_ISOLATED;
    int kernelSize = GetParamValue_Int(paramIndex++);      // 4: 内核大小 - 用于确定操作的核
    int anchorX = GetParamValue_Int(paramIndex++);      // 5 - 锚点位置x
    anchorX = CAST_RANGE(anchorX, -2 * kernelSize - 1, 2 * kernelSize + 1);
    int anchorY = GetParamValue_Int(paramIndex++);      // 6 - 锚点位置y
    anchorY = CAST_RANGE(anchorY, -2 * kernelSize - 1, 2 * kernelSize + 1);
    int iterations = GetParamValue_Int(paramIndex++);      // 7 - 迭代次数
    Mat element = getStructuringElement( kernelShape, cv::Size( 2*kernelSize + 1, 2*kernelSize+1 ));
    morphologyEx( dstMat, dstMat, method, element, cv::Point(anchorX, anchorY), iterations, borderType);

演示视频

OpenCV 4 功能 - 形态

从演示视频可看出,差值的效果确实不明显,感觉如果 膨胀 - 原图 - 腐蚀 相邻相减,基本看不到效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud微服务 【实用篇】| RabbitMQ快速入门、SpringAMQP

目录 一:初始RabbitMQ 1. 同步和异步通讯 1.1 同步调用 1.2 异步调用 2. MQ常见框架 二:RabbitMQ快速入门 1. RabbitMQ概述和安装 2. 常见消息队列模型 3. 快速入门案例 三:SpringAMQP 1. Basic Queue 简单队列模型 2. Work Queu…

高精度PWM脉宽调制信号转模拟信号隔离变送器1Hz~10KHz转0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA

主要特性: >>精度等级:0.1级。产品出厂前已检验校正,用户可以直接使用 >>辅助电源:8-32V 宽范围供电 >>PWM脉宽调制信号输入: 1Hz~10KHz >>输出标准信号:0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA等&…

统信UOS_麒麟KYLINOS与Windows通过Open SSH实现文件传输

原文链接:统信UOS/麒麟KYLINOS与Windows通过Open SSH实现文件传输 hello,大家好啊!今天我要给大家介绍的是在统信UOS或麒麟KYLINOS操作系统与Windows系统之间通过Open SSH实现文件传输的方法。在日常工作中,我们经常需要在不同操作…

各种排序算法学习笔记

Docshttps://r0dhfl3ujy9.feishu.cn/docx/XFlEdnqv9oCEoVx7ok8cpc4knnf?fromfrom_copylink如果你认为有错误,欢迎指出!

【深度学习:构建医学图像】如何构建医学图像的 QA 工作流程

【深度学习:构建医学图像】如何构建医学图像的 QA 工作流程 第 1 步:选择并划分数据集第 2 步:准备使用多个盲注进行注释第三步:建立图像标注协议第 4 步:在少数样本上练习医学图像注释第 5 步:发布第一批图…

debug之pycharm调试:出现Collecting data......

pycharm调试时,出现Collecting data… 一直在这个界面很久,这是新版本的Pycharm的bug,通常在多线程的情况下发生。 解决方法: File->Setting->Build,Execution,Deployment->Python Debugger。把Gevent compatible勾选…

当前页面一键回关

CSDN博客关注页面当前页面一键回关所有fans代码 f12打开控制台,输入以下代码 // 获取所有的button元素,根据它们的属性进行筛选 var buttons document.querySelectorAll("button[data-v-0947769e][data-ref^li_][data-id][classattention-btn]&qu…

基于ssm的毕业生学历证明系统+vue论文

内容摘要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统毕业生学历信息管理难度大,容错率低&#…

构建基于RHEL8系列(CentOS8,AlmaLinux8,RockyLinux8等)的MySQL8.0.32的RPM包

本文适用:rhel8系列,或同类系统(CentOS8,AlmaLinux8,RockyLinux8等) 文档形成时期:2023年 因系统版本不同,构建部署应略有差异,但本文未做细分,对稍有经验者应不存在明显障碍。 因软件世界之复杂和个人能力…

mySQL 汇总

登录MySQL winR 打开查询命令 输入 cmd 输入net start MySQL 打开mysql 报错:系统错误,拒绝访问 (没权限!) 解决办法:搜索栏查询‘cmd’ 使用管理员身份运行 (或鼠标右键‘开始’,windows po…

RoSA: 一种新的大模型参数高效微调方法

随着语言模型不断扩展到前所未有的规模,对下游任务的所有参数进行微调变得非常昂贵,PEFT方法已成为自然语言处理领域的研究热点。PEFT方法将微调限制在一小部分参数中,以很小的计算成本实现自然语言理解任务的最先进性能。 (RoSA)是一种新的P…

预约上门按摩系统概述

预约上门按摩系统是一种基于H5或者APP的服务平台,为用户提供预约上门按摩服务。该系统通过集成用户端、技师端、渠道商端、城市代理端、分销商端、总后台管理端,实现了用户与技师之间的快速连接,提供在线预约、支付、评价等服务。 1.用户通过…

中国数据库市场的领军黑马——亚信安慧AntDB数据库

自2008年问世以来,亚信科技AntDB数据库一直在中国国产数据库市场中崭露头角,尤其在信创政策的大力支持下,成为这一领域的一匹黑马。经过多次迭代,AntDB已经发展到了7.0版本,为超高强度和密度的业务需求提供了强有力的解…

Java多线程并发篇----第十五篇

系列文章目录 文章目录 系列文章目录前言一、偏向锁二、分段锁三、锁优化四、线程基本方法前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、偏向锁 Hotspot 的…

实时云渲染与离线渲染的区别是哪些?

实时云渲染是通过把3D渲染过程放到云端完成,从而打破用户设备限制的方式,它与离线渲染有着显著差异。 1、渲染过程 实时云渲染是在云服务器上进行的渲染,它能生成实时画面,方便用户访问和操作,而离线渲染不用响应用户操…

保障系统稳定,中电金信混沌工程再结硕果

在为金融行业提供优质服务的同时,中电金信积极参与行业标准制定。今年,公司先后参与了由中国信通院牵头发起的《一云多芯稳定性度量评估模型》、中国通信标准化协会牵头发起的《分布式系统稳定性成熟度模型》和《证券基金期货重要系统稳定性保障模型》的…

继承、修饰符、工具类、jar包

目录 1.继承 2.修饰符 3.工具类 4.jar包的制作与使用 1.继承 是什么 1.面向对象的三大特征之一(封装、继承、多态) 2.可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。 继承的格式 public class F…

一文详解JAVA的File类,FileInputStream和FileOutputStream

目录 一、File类介绍 二、FileInputStream类 三、FileOutputStream类 一、File类介绍 Java的File类是用于操作文件和目录的类。它提供了一组方法来创建、删除、重命名、复制、移动文件和目录,以及查询文件和目录的属性。 File类的常用方法有: exis…

QT上位机开发(知识产权ip保护)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 大部分看我们文章的网友,本身就是搞技术出身的,很少是做生意,或者是做销售的。但是技术本身,它又是…

一款 StarRocks 客户端工具,支持可视化建表、数据编辑

什么是 StarRocks? StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。用户无需经过复杂的预处理,就可以用 StarRocks 来支持多种数据分析场景的极速分析。 为了…