当前位置: 首页 > news >正文

图像分割-漫水填充法 floodFill

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

本文的C#版本请访问:
图像分割-漫水填充法 floodFill (C#)-CSDN博客

FloodFill方法是一种图像处理算法,它的目的是将一个闭合的区域内的像素全部涂上同一个颜色。在实现中,通常会使用递归或队列来处理待处理列表。具体的实现方式会根据具体应用场景的需求而有所不同。

CvInvoke.FloodFill方法用于执行图像的漫水填充操作,它将连通区域中的所有像素点填充为指定颜色的操作。该方法声明如下:

Public Shared Function FloodFill (

         src As IInputOutputArray,

         mask As IInputOutputArray,

         seedPoint As Point,

         newVal As MCvScalar,

         <OutAttribute> ByRef rect As Rectangle,

         loDiff As MCvScalar,

         upDiff As MCvScalar,

         Optional connectivity As Connectivity = Connectivity.FourConnected,

         Optional flags As FloodFillType = FloodFillType.Default

) As Integer

参数说明:

  1. src:输入输出的图像,必须是单通道灰度图像或三通道彩色图像。
  2. mask:掩码图像,必须是单通道8位图像,并且高宽各比源图像大2。如果指定了掩码,则只有掩码中像素值为255的区域才会被填充或者标记。如果不指定掩码,则默认填充或者标记整个图像。
  3. seedPoint:表示种子点的坐标,即从哪个像素点开始填充或者标记连通区域。
  4. newVal:填充的新颜色,可以是一个标量值(单通道图像)或一个包含三个通道值的MCvScalar结构体(三通道图像)。
  5. rect:输出参数,表示被填充区域的边界矩形。
  6. loDiff:低阈值向量。如果相邻像素点的值与种子点的差值小于低阈值向量,则将其归为同一连通区域。
  7. upDiff:高阈值向量。如果相邻像素点的值与种子点的差值大于高阈值向量,则将其归为不同的连通区域。
  8. connectivity:连接性,指定像素的相邻关系。默认为八连通。
  9. flags:漫水填充算法的标志位。默认为FixedRange,表示使用固定的阈值范围进行填充。

返回值:

返回一个整数值,表示填充的像素个数。

 '漫水填充法 floodFillPrivate Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.ClickDim m As New Mat("C:\learnEmgucv\tower.jpg", ImreadModes.Color)'种子点的坐标Dim seedPoint As New Point(100, 100)'填充颜色Dim newVal As New MCvScalar(0, 255, 255)'掩码图像Dim mmask As New Matmmask = Mat.Zeros(m.Rows + 2, m.Cols + 2, DepthType.Cv8U, 1)Dim rect As New Rectangle' 执行漫水填充Dim numFilledPixels As Integer = CvInvoke.FloodFill(m, mmask, seedPoint, newVal, rect,New MCvScalar(10, 10, 10),New MCvScalar(20, 20, 20))'输出填充的像素个数Console.WriteLine("Number of filled pixels: " & numFilledPixels)'显示填充后的图像ImageBox1.Image = m
End Sub

输出结果如下图所示:

图8-1漫水填充法实现图像分割

  '漫水填充法 floodFill'选取不同的起始点坐标进行填充Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.ClickDim msrc As New Mat("c:\learnEmgucv\tower.jpg", ImreadModes.AnyColor)ImageBox1.Image = msrcDim mask As New Mat(msrc.Rows + 2, msrc.Cols + 2, DepthType.Cv8U, 1)Dim area As Integer'从坐标(250, 250)进行填充Dim mdst1 As Mat = msrc.Clonearea = CvInvoke.FloodFill(mdst1, mask,New Point(250, 250),New MCvScalar(0, 0, 255),New Rectangle(),New MCvScalar(40, 40, 40),New MCvScalar(40, 40, 40),Connectivity.FourConnected,FloodFillType.FixedRange)CvInvoke.Imshow("mdst1", mdst1)'从坐标(400, 400)进行填充Dim mdst2 As Mat = msrc.Clonearea = CvInvoke.FloodFill(mdst2, mask,New Point(400, 400),New MCvScalar(0, 255, 0),New Rectangle(),New MCvScalar(60, 60, 60),New MCvScalar(80, 80, 80),Connectivity.FourConnected,FloodFillType.FixedRange)CvInvoke.Imshow("mdst2", mdst2)
End Sub

输出结果如下图所示:

图8-2 不同坐标点填充效果

  'FloodFill随机坐标点使用随机颜色填充Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.ClickDim msrc As New Mat("c:\learnEmgucv\tower.jpg", ImreadModes.AnyColor)ImageBox1.Image = msrcDim mask As New Mat(msrc.Rows + 2, msrc.Cols + 2, DepthType.Cv8U, 1)Dim lodiff As New MCvScalar(20, 20, 20)Dim hidiff As New MCvScalar(20, 20, 20)Dim r As New RandomFor i As Integer = 0 To 99Dim x As Integer = r.Next(msrc.Cols)Dim y As Integer = r.Next(msrc.Rows)Dim p As New Point(x, y)Dim newsc As New MCvScalar(r.Next(256), r.Next(256), r.Next(256))Dim area As Integerarea = CvInvoke.FloodFill(msrc, mask,p,newsc,New Rectangle(),lodiff,hidiff,Connectivity.FourConnected,FloodFillType.FixedRange)NextCvInvoke.Imshow("mout", msrc)
End Sub

输出结果如下图所示:

图8-3 随机坐标点使用随机颜色填充

由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。

学习更多vb.net知识,请参看vb.net 教程 目录

相关文章:

图像分割-漫水填充法 floodFill

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 本文的C#版本请访问&#xff1a;图像分割-漫水填充法 floodFill (C#&#xff09;-CSDN博客 FloodFill方法是一种图像处理算法&#…...

Python open函数详解:打开指定文件与 readline和readlines函数:按行读取文件

Python open函数详解&#xff1a;打开指定文件 掌握了各种操作目录字符串或目录的函数之后&#xff0c;接下来可以准备读写文件了。在进行文件读写之前&#xff0c;首先要打开文件。 Python 提供了一个内置的 open() 函数&#xff0c;该函数用于打开指定文件。 open() 函数的…...

Vue 生命周期有哪些?作用是什么?

什么是vue的生命周期 Vue 实例从开始创建、初始化数据、编译模板、挂载Dom和渲染、更新和渲染、卸载等一系列过程&#xff0c;这是 Vue 的生命周期 vue的生命周期的八个钩子函数 beforeCreat() 创建前 在new一个vue实例后&#xff0c;只有一些默认的生命周期钩子和默认事件&a…...

《Vue3 前端构建工具》 Vue-cli 与 Vite 创建项目的插件和配置对比

前言 2024 年 啦&#xff01;Vue2 也于 2023.12.31 寿终正寝 &#xff01; 然而我的 Vue3 升级一再拖延&#xff08;惭愧不已&#xff09;~ 赶起来吧~ 今天用 vue-cli 和 vite 分别创建了 Vue3 项目&#xff0c;具体实现步骤见如下两篇。 《基于 Vue Cli4.x Vue3 TS styl…...

springboot(ssm中山社区医疗综合服务平台 医疗管理系统 Java系统

springboot(ssm中山社区医疗综合服务平台 医疗管理系统 Java系统 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#x…...

Qt编写的exe程序上添加程序信息

1、qtcreator编写 在pro文件中添加如下信息 # 版本信息 VERSION 4.0.2.666# 图标 RC_ICONS Images/MyApp.ico# 公司名称 QMAKE_TARGET_COMPANY "Digia"# 产品名称 QMAKE_TARGET_PRODUCT "Qt Creator"# 文件说明 QMAKE_TARGET_DESCRIPTION "Qt …...

(一)CarPlay集成开发之概述与环境篇

系列文章目录 第一章 CarPlay集成开发之概述与环境篇 文章目录 系列文章目录概述开发环境依赖项总结 概述 CarPlay是由苹果公司开发的一款集成在iOS系统中&#xff0c;用于运行在已完成对接该系统的汽车中控台&#xff0c;仪表盘上的车载系统&#xff0c;该系统通过USB或者WI…...

js文件上传 分片上传/断点续传/极速秒传

(极速秒传)利用md5判断上传的文件是否存在 MD5信息摘要算法&#xff0c;一种被广泛使用的密码散列函数&#xff0c;可以产生出一个128位&#xff08;16字节&#xff09;的散列值&#xff08;hash value&#xff09;&#xff0c;用于确保信息传输完整一致。 每一个文件都会生成…...

mysql 通过 binglog 恢复数据

mysql 通过 binglog 恢复数据 测试数据库版本: 8.0.5 查看当前是否开启 进入数据库,查看当前是否开启了 binglog 的相关设置: mysql> show variables like log_bin%; -------------------------------------------------------------- | Variable_name …...

【REST2SQL】01RDB关系型数据库REST初设计

0 概念 REST2SQL实现连接数据库&#xff0c;数据库的表或视图即可提供REST的GET\POST\PUT\DELETE请求&#xff0c;SQL可执行SQLECT\INSERT\UPDATE\DELETE语句。 0.1 RDB Relational Database 即关系型数据库&#xff08;简称 RDB&#xff09;是一种以关系&#xff08;即表格…...

图像识别原理

图像识别是计算机视觉领域中的一个重要任务&#xff0c;其目标是使计算机系统能够理解和解释图像中的信息。以下是图像识别的基本原理&#xff1a; 1. 数据采集&#xff1a;首先&#xff0c;需要获取图像数据。这可以通过摄像头、传感器、扫描仪等设备来实现。图像可以是静态的…...

共识算法介绍

文章目录 共识算法Paxos 算法三种角色一致性提交算法prepare 阶段accept 阶段commit 阶段 CAP 定理BASE 理论Zookeeper 算法实现三类角色三个数据三种模式四种状态消息广播算法Leader选举算法 共识算法 Paxos 算法 Paxos 算法是莱斯利兰伯特(Leslie Lamport)1990 年提出的一种…...

Gen-AI 的知识图和分析(无需图数据库)

如今&#xff0c;图表比以往任何时候都更加相关和有用。由于目前正在发生的人工智能革命&#xff0c;工程师们正在考虑围绕 Gen-AI 的机会&#xff0c;利用具有动态提示、数据基础和屏蔽功能的开放 Gen-AI 解决方案&#xff0c;这进一步促使他们思考知识图谱等有效的解决方案。…...

flutter 安卓使用高德插件黑屏

地址 https://lbs.amap.com/api/android-sdk/guide/create-project/android-studio-create-project 下面介绍的方式是Native配置 sdk&#xff0c;也就是需要手动下载到本地在引入的方式 1、添加 jar 文件&#xff1a; 将下载的地图 SDK 的 jar包复制到工程&#xff08;此处截…...

Java:表单生成excel文档 poi 通用

在用java 写数据库应用的时候, 通常会生成各种报表&#xff0c;而这些报表可能会被导出为各种格式的文件&#xff0c;比如Excel文档&#xff0c;pdf 文档等等. 今天先做了一个生成Excel 文档的例子&#xff0c;主要解决以下问题&#xff1a; 1. 生成 Excel 文档. 2. 自动对生成…...

使用Apache Commons SCXML实现状态机管理

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;咱们程序员在开发过程中&#xff0c;经常会遇到需要管理不同状态和状态之间转换的场景。比如&#xff0c;一个在线购物的订单&#xff0c;它可能有“新建订单”、“已支付”、“配送中”、“已完成”等状态。在这…...

大数据技术原理与应用期末考试题

大数据技术原理与应用期末考试题 一、单选题 1.下面哪个选项属于大数据技术的“数据存储和管理”技术层面的功能? A、利用分布式文件系统、数据仓库、关系数据库等实现对结构化、半结构化和非结构化海量数据的存储和管理 B、利用分布式并行编程模型和计算框架,结合机器学习…...

解决jenkins的Exec command命令不生效,或者执行停不下来的问题

Jenkins构建完后将war包通过 Publish Over SSH 的插件发布到服务器上&#xff0c;在服务器上执行脚本时&#xff0c;脚本中的 nohup 命令无法执行&#xff0c;并不生效&#xff0c;我配置的Exec command命令是后台启动一个war包&#xff0c;并输出日志文件。 nohup java -jar /…...

【PHP】json_decode的第二个参数是什么意思

json_decode() 函数的第二个参数 $associative 是一个布尔值&#xff0c;用于控制 JSON 对象在 PHP 中的解码方式。当将其设置为 true 时&#xff0c;JSON 对象将被解码为关联数组&#xff1b;当设置为 false 时&#xff0c;JSON 对象将被解码为 stdClass 对象。默认值为 false…...

学生公寓安全用电管理系统应用案例

摘要&#xff1a;安全用电是学校公寓用电管理的首要任务&#xff0c;这就需要对一些恶性负载进行识别和控制&#xff0c;同时为了减少电工和后期管理人员的成本&#xff0c;引进了安全用电管理系统。本文在在描述了安全用电管理系统的工作原理和利用智能电表可实现的功能后,阐明…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...