制作logo的网站,宝安logo设计,wordpress页面发布后不显示,网络服务费交印花税吗版权声明#xff1a;本文为博主原创文章#xff0c;转载请在显著位置标明本文出处以及作者网名#xff0c;未经作者允许不得用于商业目的。 本文的C#版本请访问#xff1a;图像分割-漫水填充法 floodFill (C##xff09;-CSDN博客
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
参数说明
src输入输出的图像必须是单通道灰度图像或三通道彩色图像。mask掩码图像必须是单通道8位图像并且高宽各比源图像大2。如果指定了掩码则只有掩码中像素值为255的区域才会被填充或者标记。如果不指定掩码则默认填充或者标记整个图像。seedPoint表示种子点的坐标即从哪个像素点开始填充或者标记连通区域。newVal填充的新颜色可以是一个标量值单通道图像或一个包含三个通道值的MCvScalar结构体三通道图像。rect输出参数表示被填充区域的边界矩形。loDiff低阈值向量。如果相邻像素点的值与种子点的差值小于低阈值向量则将其归为同一连通区域。upDiff高阈值向量。如果相邻像素点的值与种子点的差值大于高阈值向量则将其归为不同的连通区域。connectivity连接性指定像素的相邻关系。默认为八连通。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 教程 目录