EmguCV学习笔记 VB.Net 8.1 漫水填充法 floodFill

news2024/9/24 5:24:07

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

EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。

教程VB.net版本请访问:EmguCV学习笔记 VB.Net 目录-CSDN博客

教程C#版本请访问:EmguCV学习笔记 C# 目录-CSDN博客

笔者的博客网址:https://blog.csdn.net/uruseibest

教程配套文件及相关说明以及如何获得pdf教程和代码,请移步:EmguCV学习笔记

学习VB.Net知识,请移步: vb.net 教程 目录_vb中如何用datagridview-CSDN博客

 学习C#知识,请移步:C# 教程 目录_c#教程目录-CSDN博客

 

8.1 漫水填充法 floodFill

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,表示使用固定的阈值范围进行填充。

返回值:

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

【代码位置:frmChapter8】Button1_Click

    '漫水填充法 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漫水填充法实现图像分割

【代码位置:frmChapter8】Button2_Click

    '漫水填充法 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 不同坐标点填充效果

【代码位置:frmChapter8】Button3_Click

    '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 随机坐标点使用随机颜色填充

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

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

相关文章

RabbitMQ本地Ubuntu系统环境部署与无公网IP远程连接服务端实战演示

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 安装内网穿透工具3.1 安装cpolar内网穿透3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学习网站&am…

Docker 数据卷管理及优化

目录 1 数据卷实现的目的 2 为什么要用数据卷 3 docker的两种数据卷 3.1 bind mount 数据卷 实践实例&#xff1a; 3.2 docker managed 数据卷 实验实例&#xff1a; 3.3 bind mount 数据卷和docker managed 数据卷的对比 3.3.1 相同点&#xff1a; 3.3.2 不同点&#xff1a; …

Ubuntu安装android studio(压缩包版)

#这里适用于linux版压缩版# 1、官网下载Linux版本压缩包 2、下载的文件 .gz,将这个包双击解压出来 3、直接进入解压包的bin目录下&#xff0c;右击在终端打开 3.1、输入 ./studio.sh ./studio.sh 如图所示&#xff1a; 后续操作见图片 下载的时候&#xff0c;直接cancel&…

HIVE 数据仓库工具之第二部分(数据库相关操作)

HIVE 数据仓库工具之第二部分&#xff08;数据库相关操作&#xff09; 一、Hive 对数据库的操作1.1 创建数据库1.1.1 创建数据库语法1.1.3 示例 1.2 使用数据库1.2.1 使用数据库语法1.2.2 示例 1.3 修改数据库1.3.1 修改数据库的语法1.3.2 示例 1.4 删除数据库1.4.1 删除数据库…

STM32基于HAL库串口printf使用和接收

我们这里使用HAL库直接用cubemx生成代码配置串口 1.打开cubemx&#xff0c;选择MCU型号 2.我这里使用的是STM32F103C8T6&#xff0c;根据自己的型号选择&#xff0c;这里不限制型号 3.选择时钟源 4.系统设置 5时钟配置 5.选择和配置串口 5.配置中断和中断优先级 6.工程设置…

ElasticSearch 集群的索引别名管理

一、索引别名 &#xff08;一&#xff09;添加索引别名 1.给单个索引添加别名 POST http://10.0.0.101:9200/_aliases{"actions":[{"add":{"index":"yedu-linux85","alias":"Linux容器运维"} },{"add&q…

Xinstall赋能,H5与App完美融合,打造极致用户体验

随着移动互联网的迅猛发展&#xff0c;App已经成为我们日常生活中不可或缺的一部分。然而&#xff0c;在App推广和运营的过程中&#xff0c;推广者们常常面临着一个难题&#xff1a;如何将H5网页上的用户顺利引导至App内&#xff0c;实现用户增长和活跃度提升&#xff1f;今天&…

ShenNiusModularity项目源码学习(3:用户登录)

第一篇文章中搞错了一件事&#xff0c;ShenNiusModularity项目启动并非需要同时启动ShenNius.Admin.Mvc和ShenNius.Admin.Hosting两个项目&#xff0c;仅需启动前者即可登录后台管理系统&#xff0c;而后者是支持前后端分离的API宿主项目&#xff0c;供其它前后端分离的项目调用…

uniapp组件中的emit声明触发事件

emit解析 在 uniapp 中&#xff0c;emit 主要用于组件间通信&#xff0c;特别是在子组件需要向父组件或者其他组件发送消息的时候。具体用途包括&#xff1a; 子传父数据&#xff1a;子组件通过 $emit 触发一个事件&#xff0c;并携带参数&#xff0c;父组件监听这个事件并对参…

uniapp 封装uni.login 实现全局调用

封装utils app.vue中 使用globalData 注册 utils 页面中使用方法 定义app 调用方法

GAMES202——作业3 Screen Space Ray Tracing

任务 为场景实现屏幕空间的全局光照效果 1.直接光照&#xff1a; 实现ssrFragmentShader中的EvalDiffuse(wi, wo, uv) 和EvalDirectionalLight(uv) 函数&#xff0c;并在 main 函数中实现直接光照的效果。 2.屏幕空间光线求交&#xff1a;实现RayMarch(ori, dir, out hitPos) …

Open3D mesh 网格简化(顶点聚类)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始mesh 3.2聚类后的mesh Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总&#xff08;长期更新&#xff0…

开源 AI 智能名片 O2O 商城小程序:引入淘汰机制,激发社交电商新活力

摘要&#xff1a;本文深入探讨在社交电商领域中&#xff0c;开源 AI 智能名片 O2O 商城小程序如何通过设置淘汰机制&#xff0c;实现“良币驱逐劣币”&#xff0c;激励士气&#xff0c;为社交电商企业注入新的活力。通过分析缺乏淘汰机制的弊端以及设置淘汰机制的优势&#xff…

sickos 靶机渗透(wolf cms 渗透,squid 代理)

靶机信息 vulnhub靶机 主机发现 192.168.50.152 为靶机Ip ┌──(kali㉿kali)-[~/testSickos] └─$ sudo nmap -sn 192.168.50.0/24 [sudo] password for kali: Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-30 09:56 CST Nmap scan report for 192.168.50.1 …

Linux 下查找运行中的 Java 进程及 .jar 文件位置

在 Linux 环境中&#xff0c;有时我们需要查找正在运行的 Java 进程以及它们对应的 .jar 文件位置。本文将介绍如何使用命令行工具来实现这一目标。 前言 在 Linux 系统中&#xff0c;我们经常需要监控正在运行的应用程序&#xff0c;特别是在出现问题时&#xff0c;了解应用程…

使用API有效率地管理Dynadot域名,添加账户中的联系人信息

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

Android 移除最近任务列表展示

Android 设置应用在最近任务列表不展示 android 中想要实现在最近任务列表中不展示,实现的方式很简单. 在Mainifests的MainActivity中添加: android:excludeFromRecents“true” 如下所示: <activity android:name".MainActivity"android:excludeFromRecents&…

Nvidia股价前景引投资者情绪波动:杠杆ETF数据透视市场风向

一、Nvidia业绩前瞻&#xff1a;看跌情绪升温 随着Nvidia&#xff08;NVDA&#xff09;季度业绩发布日的临近&#xff0c;市场中的投资者情绪似乎正经历着微妙的变化。据多家发行杠杆型交易所交易基金&#xff08;ETF&#xff09;的机构数据显示&#xff0c;投资者对看跌Nvidia…

【机器学习】支持向量机(SVM)的对偶性、核方法以及核技巧

引言 在SVM中&#xff0c;通过引入拉格朗日乘子&#xff0c;可以将原始问题转化为对偶问题&#xff0c;这种转换具有几个重要的优点&#xff0c;包括简化计算和提供更直观的优化问题的解释 文章目录 引言一、支持向量机&#xff08;SVM&#xff09;的对偶性1.1 原始问题&#x…

【知识库系列】MPR/多模态方向观察:图像视频与3D生成

多模态背后的backbone会长成什么样&#xff1f; 各种模态到梯度下降到最后会不会都差不多&#xff1f; Sora 是不是已经被追上了? 我们真的把视频数据都用好了吗&#xff1f; 知识库完整文档&#xff1a; MPR/多模态方向观察&#xff1a;图像视频与3D生成&#xff1a;https…