Opencv(C++)笔记--利用分水岭算法实现图像分割

news2024/12/25 13:23:37

1--分水岭算法的原理

详细原理讲解可参考:博客1和视频1;

原理简述:分水岭算法的基本思想是把图像视为拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而两个集水盆之间的边界则形成分水岭。分水岭的概念和形成可以通过模拟浸入过程来说明:在每一个局部极小值表面,刺穿一个小孔,然后把整个模型慢慢浸入水中,随着浸入水的加深,每一个局部极小值的影响域慢慢向外扩展,在两个集水盆汇合处构筑大坝,即形成分水岭。

2--OpenCV API

函数 cv::watershed() 实现的分水岭算法是基于标记的分割算法。在把源图像传给函数之前,需要大致勾画标记出图像期望分割的区域。

3--代码实例

3-1--OpenCV处理流程:

① 背景转换:白色背景转换为黑色背景;

② 图像锐化:利用拉普拉斯算子模糊处理图像,将源图像减去模糊图像;

③ 距离变换:对锐化后的图像进行距离变换,基于cv::distanceTransform() 计算源图像的每个像素到最近的零像素的距离;

④ 生成标记:通过二值化、腐蚀、轮廓检测等生成图像标记;

⑤ 分水岭变换:基于cv::watershed() 使用源图像和标记图像实现分水岭变换;

⑥ 填充:对分割得到的对象进行颜色填充;

前4步可以理解为:将源图像期望分割的区域进行标记出来。

3-2--完整代码

补充说明:如果要展示标记图像,需要将markers转换为CV_8U,否则会报错。

3-3--结果展示

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

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

相关文章

csrf漏洞原理及防御

攻击原理 从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤 1.登录受信任网站A,并在本地生成Cookie 2.在不登出A的情况下,访问危险网站B 防御原理 csrf能防御的本质是,黑客虽然携带了合法的cookie&a…

振弦采集模块的辅助功能寄存器

振弦采集模块辅助功能寄存器 1.频率值模拟量输出 VMXXX(仅 VM501、 VM511) 模块支持将当前实时频率值以模拟量形式从管脚输出,模拟量有电流和电压两种输出形式。为了使用此功能,需要将辅助功能寄存器 AUX.[0]设置为 1&#xff0…

<Linux开发> ubuntu开发工具-EasyConnect使用记录

<Linux开发> ubuntu开发工具-EasyConnect使用记录 1、安装EasyConnect 打开EasyConnect官网EasyConnect 根据当前电脑系统选择对应版本下载 作者这里是ubuntu 22.04版本 右击,选择 “软件安装” 即可安装完成;windows版本类似…

数据可视化:揭开“智慧校园”新篇章,助力新时代教育信息化

随着移动互联网、物联网等新一代信息技术的快速发展,建设智慧校园已经具备了成熟的技术条件。自从教育部启动教育信息化2.0计划后,建设智慧校园已成为我国教育信息化发展目标,无论是国家教育事业发展的十三五规划,还是十四五规划&…

Hadoop高手之路7-Hadoop的新特性

文章目录Hadoop高手之路7-Hadoop的新特性一、Hadoop2.0以上新特性二、Yarn资源管理框架1. yarn体系结构2. yarn的工作流程三、HDFS的高可用HA1. HDFS的高可用(HA)架构2. 搭建Hadoop高可用HA集群1) 规划集群节点2) 环境准备3) 配置HA集群(1) 修改core-sit…

【ROS】—— ROS通信机制——实践与练习(六)

文章目录前言1. 话题发布1.1 C方式实现1.2 python实现2. 话题订阅2.1 C实现2.2 python实现3. 服务调用3.1 C3.2 python4. 参数设置4.1 C4.2 python4.3 运行4.4 其他方式4.4.1 修改小乌龟节点的背景色(命令行实现)4.4.2 启动节点时,直接设置参数4.4.3 通过launch文件…

Java测试框架——JUnit详解(45)

文章目录前言何为JUnit?官方资料JUnit4常用注解和断言代码测试搭建一个JUnit测试环境生命周期忽略测试断言测试异常测试测试时间套件测试JUnit5JUnit5对比JUnit4的好处导包的改变注解的改变扩展JUnit新功能:参考文章JUnit是Java编程语言的单元测试框架&a…

list的介绍及模拟实现

🌈感谢阅读East-sunrise学习分享——list的介绍及模拟实现 博主水平有限,如有差错,欢迎斧正🙏感谢有你 码字不易,若有收获,期待你的点赞关注💙我们一起进步 今天想分享介绍一下STL的容器之一lis…

openharmony GPIO 驱动开发

openharmony GPIO 驱动开发GPIO 基础知识GPIO 基础知识——概念GPIO 基础知识——IO 复用GPIO 基础知识——GPIO 分组和编号GPIO 基础知识——用户态测试HDF 框架下 GPIO 驱动HDF 框架下的 GPIO 驱动——案例描述(以 HI3516DV300 平台为例,提供代码)HDF 框架下的 GP…

为什么jvm需要有栈协程?

旧有的servlet生态的线程模型 首先我们先要聊一聊现在我们用的最多的servlet的执行模型是什么: 这个dispatch其实就是一个EventLoop或者说是一个selector来检测注册到其上的链接状态发生的变化 以Tomcat为例子,当这个selector发现存在一个链接可读时&…

【node.js】fs\path\http模块的使用

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:Node.js的fs\path\http模块的使用,模块化开发概念 目录 一、node.js概念与作…

一个曾经分享动态(2021)的回顾和解释-2023-

虽然看过一些典故,里面有名言道: 解释永远是多余的,理解的人不需要,不理解的更不需要。 但是,误会还是需要沟通来消除的。 例如,曾经分享过: 如下都是误会 ↓↓↓↓↓↓↓↓↓ 有朋友联系我&a…

解决东方财富数据接口激活后仍显示reactive的问题

首先确保代码可以在python中导入这个包: from EmQuantAPI import c如果无法导入,就是python没有配置好东方财富的接口,可以参考: Mac版本:Mac使用Python接入东方财富量化接口Choice,调试与获取数据Window…

北京智和信通:信创运维自动化,全栈适配国产软硬件环境

近年来,新基建和信创产业政策东风席卷神州,国产CPU、操作系统、关键应用软件等核心技术步入发展快车道,一批优秀软硬件产品走进政府机关、国企事业单位。在国产软硬件核心技术崛起的过程中,如何迅速搭建起成熟的生态环境是行业面临…

LeetCode135之分发糖果(相关话题:数组,贪心思想)

题目描述 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果,计算并返回需…

【node.js】跨域的解决办法(CORS方法、同源策列的理解)

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:面对cors跨域、同源策略的处理 下图为本文的核心 目录 一、 跨域介绍 二、同源策略 三…

正态分布与numpy.random.normal函数

文章目录1. 正态分布2. numpy.random.normal函数3. 示例在Numpy中,有一个专门用于生成符合正态分布的随机数函数:numpy.random.normal,本文我们梳理一下它的使用方法,在梳理前,需要先了解一下什么是正态分布。 1. 正态…

黑马Hive+Spark离线数仓工业项目-任务流调度工具AirFlow(1)

任务流调度工具AirFlow 1. AirFlow介绍【了解】 - 功能、特点 - 架构角色、安装部署 2. **AirFlow使用【掌握】** - 核心:调度脚本【Python | Shell】 - 定时调度:Linux Crontab表达式 - 邮件告警:配置 3. 回顾Spark核心概念 - 存…

【10个基本网络故障排查工具-每个IT专业人员应了解】

网络故障排除工具是每个网络管理员的必需品。 在网络领域入门时,重要的是要积累一些可用于解决各种不同网络状况的工具。 虽然特定工具的使用确实是主观的并且由工程师自行决定,但本文中的工具选择是基于它们的一般性和通用性。 本文回顾了可帮助您解决大…

聊聊业务项目如何主动感知mysql是否存活

前言 先前写过一篇文章聊聊如何利用redis实现多级缓存同步,里面讲到业务部门因数据库宕机,有技术提出当数据库宕机,切换到redis,今天我们就来聊聊如何触发这个切换动作? 1、方案一:利用异常机制 伪代码如下&#xf…