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

长沙建网站需要多少钱网站设计 开发人员

长沙建网站需要多少钱,网站设计 开发人员,北京网站搭建公司排行,中企动力企业邮箱登陆首页版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 教程VB.net版本请访问:EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问:EmguCV学习笔记 C# 目录-CSD…

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

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

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

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

教程配套文件及相关说明以及如何获得pdf教程和代码(博客上的教程内容会和pdf教程一致,教程中也会包含所有代码),请移步:EmguCV学习笔记

4.2 二值化

4.2.1 Threshold    

Threshold方法用于对图像进行二值化处理,将图像中的像素值转换为0或255,以便于后续的图像分割、形状检测等处理。该方法只能处理灰度图像,如果要对彩色图像进行二值化处理,需要先将其转换为灰度图像。此外,在使用Threshold方法时,还需要根据实际情况选择不同的二值化操作类型,以达到最佳的处理效果。

Threshold的声明如下:

Public Shared Function Threshold(src As Emgu.CV.IInputArray, dst As Emgu.CV.IOutputArray, threshold As Double, maxValue As Double, thresholdType As Emgu.CV.CvEnum.ThresholdType) As Double

参数说明:

  1. src:原始图像,通常是Mat类型。
  2. dst:输出图像,通常是Mat类型。
  3. thresh:阈值,Double类型。
  4. maxval:最大值,Double类型,在二值化操作中,将大于阈值的像素值设为该值。
  5. type:二值化操作的类型,ThresholdType类型,包括以下常量:
  1. Binary:二值化操作,将大于阈值的像素值设为maxval,小于等于阈值的像素值设为0。
  2. BinaryInv:反向二值化操作,将小于等于阈值的像素值设为maxval,大于阈值的像素值设为0。
  3. Trunc:截断操作,将大于阈值的像素值设为阈值,小于等于阈值的像素值不变。
  4. ToZero:零值操作,将小于等于阈值的像素值设为0,大于阈值的像素值不变。
  5. ToZeroInv:反向零值操作,将大于阈值的像素值设为0,小于等于阈值的像素值不变。
  6. Otsu:使用大津法,通过分析图像的灰度直方图,自动确定最佳的阈值,从而实现二值化,可以适用于大部分图像的二值化处理。如果使用了此类型,那么thresh参数将忽略。
  7. Triangle:使用Triangle算法,通过寻找直方图中的三角形区域,自动确定最佳的阈值,从而实现二值化。如果使用了此类型,那么thresh参数将忽略。

返回值:

返回ThresholdType为Otsu 或Triangle时,确定的最佳阈值(threshold的参数的值);如果ThresholdType不是Otsu 或Triangle,那么就返回设定的阈值。

【代码位置:frmChapter4】Button2_Click

    'Threshold

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

'可以直接使用ImreadModes.Grayscale,这里为了直观对比使用彩色图像       

Dim m As New Mat("C:\learnEmgucv\lena.jpg", ImreadModes.Color)

        ImageBox1.Image = m

        '灰度转换

        Dim mgray As New Mat

        CvInvoke.CvtColor(m, mgray, ColorConversion.Bgr2Gray)

        Dim mOut1 As New Mat

        '使用Binary类型进行二值化

        CvInvoke.Threshold(mgray, mOut1, 125, 255, ThresholdType.Binary)

        ImageBox2.Image = mOut1

        Dim mOut2 As New Mat

        Dim thresh As Double

        '使用大律法自动确定阈值进行二值化,并返回使用Otsu计算出的阈值

        thresh = CvInvoke.Threshold(mgray, mOut2, 0, 255, ThresholdType.Otsu)

        ImageBox3.Image = mOut2

End Sub

运行后如下图所示:

 

图4-3 图像二值化

4.2.2 AdaptiveThreshold

AdaptiveThreshold方法用于对图像进行自适应阈值处理,将图像中的像素值转换为0或255,以便于后续的图像分割、形状检测等处理。该方法只能处理灰度图像,如果要对彩色图像进行自适应阈值处理,需要先将其转换为灰度图像。

AdaptiveThreshold方法的声明如下:

Public Shared Sub AdaptiveThreshold(src As Emgu.CV.IInputArray, dst As Emgu.CV.IOutputArray, maxValue As Double, adaptiveType As Emgu.CV.CvEnum.AdaptiveThresholdType, thresholdType As Emgu.CV.CvEnum.ThresholdType, blockSize As Integer, param1 As Double)

主要参数说明:

  1. maxValue:最大值,Double类型,在二值化操作中,将大于阈值的像素值设为该值。
  2. adaptiveMethod:自适应阈值处理的方法,AdaptiveThresholdTyp类型,包括以下常量:
    1. MeanC:阈值为邻域内的均值减去一个常数(param1)。
    2. GaussianC:阈值为邻域内的高斯加权平均值减去一个常数(param1)。
  3. thresholdType:二值化操作的类型,只能是ThresholdType类型的Binary或者BinaryInv。
  4. blockSize:邻域大小,必须为大于3的奇数。
  5. param1:常数,Double类型,表示从均值或高斯加权均值中减去的常数。

【代码位置:frmChapter4】Button3_Click

    'AdaptiveThreshold

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

        Dim m As New Mat("C:\learnEmgucv\lena.jpg", ImreadModes.Color)

        ImageBox1.Image = m

        '彩色转为灰度

        Dim mgray As New Mat

        CvInvoke.CvtColor(m, mgray, ColorConversion.Bgr2Gray)

        Dim mOut1 As New Mat

        '使用高斯加权平均值进行二值化

        CvInvoke.AdaptiveThreshold(mgray, mOut1, 255, AdaptiveThresholdType.GaussianC, ThresholdType.Binary, 3, 0)

        ImageBox2.Image = mOut1

        Dim mOut2 As New Mat

        '使用均值进行二值化

        CvInvoke.AdaptiveThreshold(mgray, mOut2, 255, AdaptiveThresholdType.MeanC, ThresholdType.Binary, 3, 0)

        ImageBox3.Image = mOut2

End Sub

运行后如下图所示:

图4-4 使用AdaptiveThreshold进行图像二值化

4.2.3 图像通道分离和合并

图像通道的分离和合并分别使用到了CvInvoke的Split和Merge方法。Merge方法在2.3.11节【图像通道的分离与合并】有介绍,而CvInvoke.Split方法和该节的Mat.Split方法有所区别,详细请看代码说明。

【代码位置:frmChapter4】Button4_Click

    '通道分离和合并

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click

        Dim m As New Mat("C:\learnEmgucv\lena.jpg", ImreadModes.Color)

        ImageBox1.Image = m

        '将图像通道分离到 VectorOfMat

        Dim vom As New VectorOfMat()

        CvInvoke.Split(m, vom)

        Dim mOut1 As New Mat

        '输出分离后的第一个通道

        mOut1 = vom(0)

        ImageBox2.Image = mOut1

        '注意和CvInvoke.Split的对比

        Dim channels() As Mat = m.Split()

        '对三个通道分别进行二值化

        CvInvoke.Threshold(channels(0), channels(0), 100, 255, CvEnum.ThresholdType.Binary)

        CvInvoke.Threshold(channels(1), channels(0), 100, 255, CvEnum.ThresholdType.Binary)

        CvInvoke.Threshold(channels(2), channels(0), 100, 255, CvEnum.ThresholdType.Binary)

        '将处理后的三个通道推入 VectorOfMat

        Dim newm As New VectorOfMat

        newm.Push(channels(0))

        newm.Push(channels(1))

        newm.Push(channels(2))

        Dim mdst As New Mat

        '合并通道

        CvInvoke.Merge(newm, mdst)

        ImageBox3.Image = mdst

End Sub

运行后如下图所示:

图4-5 图像通道的分离和合并

4.2.4 按颜色分离

CvInvoke.InRange方法用于在图像中找到指定范围内的像素,并将其设置为白色,其余的像素设置为黑色。在使用CvInvoke.InRange方法时,需要根据实际情况选择合适的下限和上限,以达到最佳的处理效果。同时,CvInvoke.InRange方法只能处理单通道和三通道的图像。如果图像通道数不为1或3,需要先将其转换为单通道或三通道图像。

InRange方法的声明如下:

Public Shared Sub InRange(src As Emgu.CV.IInputArray, lower As Emgu.CV.IInputArray, upper As Emgu.CV.IInputArray, dst As Emgu.CV.IOutputArray)

主要参数说明:

lowerb参数是指定范围的下限。

upperb参数是指定范围的上限。

【代码位置:frmChapter4】Button5_Click

    '颜色分离

    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click

        Dim m As New Mat("C:\learnEmgucv\wslt.jpg", ImreadModes.Color)

        ImageBox1.Image = m

        Dim hsv As New Mat

        '转为Hsv,更容易分离颜色

        CvInvoke.CvtColor(m, hsv, ColorConversion.Bgr2Hsv)

        '设置颜色范围下限和上限,需要根据实际慢慢修改

        Dim lowerb1 As New ScalarArray(New MCvScalar(0, 10, 180))

        Dim upperb1 As New ScalarArray(New MCvScalar(50, 160, 255))

        Dim dst As New Mat

        '使用InRange分离颜色,返回二值图

        CvInvoke.InRange(hsv, lowerb1, upperb1, dst)

        ImageBox2.Image = dst

        Dim dstchannel3 As New Mat()

        '转为3通道图像

        CvInvoke.CvtColor(dst, dstchannel3, ColorConversion.Gray2Bgr)

        Dim result As New Mat()

        'And运算,然后显示分离结果

        CvInvoke.BitwiseAnd(m, dstchannel3, result)

        ImageBox3.Image = result

End Sub

运行后如下图所示:

图4-6 InRange方法分离出人脸

http://www.yayakq.cn/news/912853/

相关文章:

  • 小白如何建设网站织梦网站后台地址
  • 单位 内网网站建设山东郓城住房和城乡建设厅网站
  • 微信h5商城网站大连仟亿科技网站建设公司 概况
  • 上海网站搜索优化南阳seo
  • 购物网站模板代码下载网站开发绪论
  • 免费人才招聘网站建设工程安全事故在哪个网站查
  • 0基础网站建设教程视频教程贵州微信网站建设
  • 做影视网站对服务器要求网络系统管理大赛样题
  • 如何做一个好的网站做网站为什么要租服务器
  • 网站开发会遇到的问题做贸易怎么找客户
  • 做网站的把网站写成一行wordpress+制作widget
  • 成都网站建设 赢展网站怎么做引流呢
  • 上海定制网站建设阿里云已备案域名出售
  • 传诚信网站建设2017手机网站建设方案
  • 网站构成的基本结构网络营销是什么基础类型
  • 医药电商网站建设房产网站建设方案
  • 门户网站什么意思wordpress增加页面分类
  • 网站建设前景如何可以做砍价活动的网站
  • 网站建设要做原型图吗做网站建设找哪家好
  • 那些彩票广告网站怎么做的江门网站推广深圳公司
  • 有哪些网站可以做兼职做一个简单的网页游戏
  • 手机在线做ppt的网站有哪些问题建设银行重庆分行网站
  • 文山北京网站建设佛山logo设计公司
  • 在百度怎么建自己的网站罗源做网站的公司
  • 庆云县建设局网站开源免费企业网站系统
  • 网站服务器物理地址怎么查加工网平台
  • wordpress导入excelwordpress wp_head()优化
  • 网站轮播图用啥软件做花瓣网是仿国外那个网站做的
  • 公司网站制作企业天津集体建设用地出售 网站
  • 深圳品牌网站建设公司哪家好1688网站特点