图像分割-漫水填充法 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,表示使用固定的阈值范围进行填充。

返回值:

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

 '漫水填充法 floodFill
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim 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 Mat
        mmask = 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.Click
        Dim msrc As New Mat("c:\learnEmgucv\tower.jpg", ImreadModes.AnyColor)
        ImageBox1.Image = msrc

        Dim mask As New Mat(msrc.Rows + 2, msrc.Cols + 2, DepthType.Cv8U, 1)
        Dim area As Integer
        '从坐标(250, 250)进行填充
        Dim mdst1 As Mat = msrc.Clone
        area = 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.Clone
        area = 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.Click
        Dim msrc As New Mat("c:\learnEmgucv\tower.jpg", ImreadModes.AnyColor)
        ImageBox1.Image = msrc

        Dim 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 Random

        For i As Integer = 0 To 99
            Dim 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 Integer
            area = CvInvoke.FloodFill(msrc, mask,
                                      p,
                                      newsc,
                                      New Rectangle(),
                                      lodiff,
                                      hidiff,
                                      Connectivity.FourConnected,
                                      FloodFillType.FixedRange)

        Next
        CvInvoke.Imshow("mout", msrc)
End Sub

输出结果如下图所示:

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

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

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

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

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

相关文章

软件测试/测试开发丨Vuetify框架的使用

介绍 Vuetify 是一个基于 Vue.js 精心打造 UI 组件库&#xff0c;整套 UI 设计为 Material 风格。能够让没有任何设计技能的开发者创造出时尚的 Material 风格界面。 为什么要使用Vuetify框架 所有组件遵从 Material Design 设计规范&#xff0c;UI 体验非常优秀&#xff0c…

计算机毕业设计-----ssm+mysql实现的JavaWeb酒店管理系统

项目介绍 本项目为基于ssmmysql实现的JavaWeb酒店管理系统; 主要功能包括&#xff1a; 管理员登录,收入统计,客房管理,商品管理,客房预订,住宿登记,财务统计,旅客管理,接待对象管理等功能。 环境需要 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上…

UDS诊断(ISO14229-1) 22服务

文章目录 功能简介应用场景请求和响应1、请求2、子功能3、肯定响应4、否定响应 报文示例常用 DIDUDS中常用 NRC参考 功能简介 22服务&#xff0c;即 ReadDataByIdentifier&#xff08;按标识符读取数据&#xff09;服务&#xff0c;该服务允许客户端请求读取服务器中通过一个或…

数据结构初阶之栈和队列(C语言版)

数据结构初阶之栈和队列&#xff08;C语言版&#xff09; ✍栈♈栈的结构设计♈栈的各个接口的实现&#x1f47a;StackInit(初始化)&#x1f47a;push&#xff08;入栈&#xff09;&#x1f47a;pop&#xff08;出栈&#xff09;&#x1f47a;获取栈顶元素&#x1f47a;获取栈中…

案例081:基于微信小程序的移动平台的远程在线诊疗系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

2024年金融变革RWA的7大展望

作者&#xff1a;SanjayRoofstock onChain的副总裁 编译&#xff1a;秦晋 碳链价值 稳定币、代币化国债、去中心化私人信贷、实物支持的NFTs、气候和再生金融DeFi - 这些只是未来一年将重塑资本市场的部分趋势。 在不断变化的金融格局中&#xff0c;过去两年给我们带来了一系列…

玩转贝启科技BQ3588C开源鸿蒙系统开发板 —— 开发板详情与规格

本文主要参考&#xff1a; BQ3588C_开发板详情-开源鸿蒙技术交流-Bearkey-开源社区 BQ3588C_开发板规格-开源鸿蒙技术交流-Bearkey-开源社区 厦门贝启科技有限公司-Bearkey-官网 1. 开发板详情 RK3588 核心板是一款由贝启科技自主研发的基于瑞芯微 RK3588 AI 芯片的智能核心…

专题一:递推与递归

递归 例题 递归实现指数型枚举 从 1∼n这 n个整数中随机选取任意多个&#xff0c;输出所有可能的选择方案。 输入格式 输入一个整数 n。 输出格式 每行输出一种方案。 同一行内的数必须升序排列&#xff0c;相邻两个数用恰好 1 个空格隔开。 对于没有选任何数的方案&#xff0c…

认识SpringBoot项目中的Starter

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 循序渐进学SpringBoot ✨特色专栏&…

webshell检测方式深度剖析 --- Pixy系列二(数据流分析)

开篇 书接上文&#xff0c;这次我们来聊聊数据流分析&#xff0c;数据流分析的内容非常广泛&#xff0c;我们力求深入浅出通俗易懂&#xff0c;在简短的篇幅内将这一概念描述清楚。 简单来说&#xff0c;数据流分析是一种用来获取相关数据沿着程序执行路径流动的信息分析技术…

ROS学习笔记(7)进一步深入了解ROS第一步

0.前提 最近在学习宾夕法尼亚大学工程学院的ROS公开课&#xff0c;在尽力的去融入全英语的环境&#xff08;哪怕我的英语水准并不是很高&#xff09;。既然是在学习&#xff0c;笔记也就是必须的了&#xff0c;当然这些笔记都是课程当中提出的问题&#xff0c;我去寻找后得出的…

EDI 项目推进流程

EDI 需求确认 交易伙伴发来EDI对接邀请&#xff0c;企业应该如何应对&#xff1f; 首先需要确认EDI需求&#xff0c;通常包括传输协议和报文标准以及传输的业务单据类型。可以向交易伙伴发送以下内容&#xff1a; &#xff08;中文版&#xff09; 与贵司建立EDI连接需要使用…

案例086:基于微信小程序的影院选座系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

七功能遥控编解码芯片

一、基本概述 TT6/TR6 是一对为遥控玩具车设计的 CMOS LSI 芯片。TT6 为发射编码芯片&#xff0c;TR6 为接收解码芯片。TT6/TR6 提供七个功能按键控制前进、后退、左转、右转、加速、独立功能 F1,独立功能 F2 的动作。除此以外&#xff0c;还有这五种常规小车功能&#xff08;…

Spring MVC - Controller的创建与使用

控制器Controller是处理器&#xff0c;是真正处理请求的组件 1 创建Controller 一般在src/main/java/com/qdu下建立一个controller包用来存放所有控制器。当创建一个控制器时&#xff0c;首先要记得使用Controller标记将该类注册成为一个控制器类。 然后在SpringMVCConfig类…

PostgreSQL数据库的json操作

1.操作符 select json字段::json->key值 from order -- 对象域 select json字段::json->>key值 from order -- 文本 select json字段::json#>{key值} from order -- 对象域 select json字段::json#>>{key值} from order -- 文本对象域表示还能继续操作&#…

《MySQL系列-InnoDB引擎02》InnoDB存储引擎介绍

文章目录 第二章 InnoDB存储引擎1 InnoDB存储引擎概述2 InnoDB存储引擎的版本3 InnoDB体系架构3.1 后台线程3.2 内存 4 Checkpoint技术5 Master Thread 工作方式5.1 InnoDB 1.0.x版本之前的Master Thread5.2 InnoDB 1.2.x版本之前的Master Thread5.3 InnoDB 1.2.x版本的Master …

Windows下使用wireshark抓取usb数据

参考&#xff1a;使用Wireshark获取USB数据&#xff08;https://blog.csdn.net/2301_76293276/article/details/133791136&#xff09; 文章目录 安装wireshark运行wireshark筛选所需连接设备数据 安装wireshark 直接官网下载wireshark&#xff08;https://www.wireshark.org…

关于“Python”的核心知识点整理大全57

目录 3. 模板edit_entry edit_entry.html 4. 链接到页面edit_entry topic.html 19.2 创建用户账户 19.2.1 应用程序 users 1. 将应用程序users添加到settings.py中 settings.py 2. 包含应用程序users的URL urls.py 19.2.2 登录页面 urls.py 1. 模板login.html log…

Git原理与使用(二):分支管理

Git原理与使用[二]:分支管理 一.分支的基本操作1.理解分支2.创建分支3.切换分支4.删除分支5.补充:创建并切换分支 二.合并分支1.合并分支的基础操作2.分支冲突 三.分支管理策略1.Fast-forward模式2.--no--ff(即:禁用Fast-forward模式)3.分支策略 四.创建临时分支修复bug1.git s…