网页验证码识别实例VB.NET2019(二)

本文介绍了如何使用VB.NET 2019进行网页验证码识别,包括分析验证码特征、图片灰度化、二值化和去噪处理。通过8邻域和连通域去噪方法,实现对验证码图像的优化,为后续的字符识别做准备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  上一节,获取了网页验证码。这一节开始讲讲怎么识别验证码。

  2、获取36个字符的特征码

  2.1 分析验证码特征

验证码图片:
Alt

  经研究,发现该网页验证码的图片中字符是由数字和大写字母组成,每张验证码4个字符。其中由于数字0、1和和字母O和I比较接近,所以这四个字符没有出现,再加上和2比较像的字母Z一共有5个字符没有,所以出现的字符只有35个。
  验证码字符没有变形,大小一致。背景有噪点,大小不一。

  2.3验证码字符特征码必须的流程:

图片灰度化
图片二值化
图片分割
图片特征码提取

图片特征码提取参考louislong007兄弟的博文做了修改(https://blog.csdn.net/louislong007/article/details/47683035)

  2.4 图片灰度化

在这里插入图片描述
  图片灰度化就是利用特定算法,将彩色图片中的每一个像素点R、G、B三个颜色分量转换为相同的色值(0-255)。
   根据YUV的颜色空间中,Y的分量的物理意义是点的亮度,由该值反映亮度等级,根据RGB和YUV颜色空间的变化关系可建立亮度Y与R、G、B三个颜色分量的对应:Y=0.3R+0.59G+0.11B,以这个亮度值表达图像的灰度值。

    ''' <summary>
    ''' 函数功能:灰度化bitmap图像
    ''' </summary>
    ''' <param name="bmp">bitmap对象</param>
    ''' <returns>返回灰度化的bitmap对象</returns>
 Public Function ConvertToGrayImage(ByVal bmp As Bitmap) As Bitmap
        Dim bm As Bitmap = New Bitmap(bmp.Width, bmp.Height)
        Dim i As Integer
        Dim j As Integer
        For i = 0 To bmp.Width - 1
            For j = 0 To bmp.Height - 1
                Dim color As Color = bmp.GetPixel(i, j) '获取该点的像素的RGB的颜色
                '利用公式计算灰度值
                '根据YUV的颜色空间中,Y的分量的物理意义是点的亮度,由该值反映亮度等级,
                '根据RGB和YUV颜色空间的变化关系可建立亮度Y与R、G、B三个颜色分量的对应:
                'Y=0.3R+0.59G+0.11B,以这个亮度值表达图像的灰度值
                Dim
注意事项:调试模式请把DLL辅助文件程序运行的目录下,其他文件也设置好相应路径,否则会调试出错。 DLL一共4主个命令,3个辅助命令,可以应对各种情况。 1.loadcode:载入验证码 2.Recognition:识别 3.outitem:取项目名称 4.Writepic:保存图片 5.Recognitiond:另外一种识别识别1的区别是不需要传递指针参数。 6.yLength:返回识别结果长度。 7.tebie: 特殊方式处理图片时使用。 [in]:传入参数 [out]:接收参数 以下DLL对于整数型不需要用的就传递 0 ,文本不需要用的就传递 空文本。 文件说明: ycode.dll主调用DLL,其他的为,辅助文件。 ----------------------------------------------------------------------------------- 一般调用顺序为 loadcode - Recognition - Writepic ----------------------------------------------------------------------------------- .DLL命令 loadcode, 整数型, "ycode.dll" 返回项目数 [in].参数 code, 整数型 1验证码库字节集指针地址 [in].参数 Length, 整数型 2)指针长度 [in].参数 Address, 文本型 3)验证码库的路径 [in].参数 pass, 文本型 4)验证码库的密码 备注:1+23任意选一组就可以了. 4.输入相应的密码,没有密码就传递一个空文本就可以了. VB申明: Declare Function loadcode Lib "ycode.dll" Alias "loadcode" (ByVal code As Long, ByVal length As Long, ByVal address As String, ByVal pass As String) As Long 返回值 Long,返回项目个数。 ----------------------------------------------------------------------------------- .DLL命令 outitem, 文本型, "ycode.dll" 返回项目名称 [in].参数 no, 整数型 1) 项目序号 VB申明: Declare Function outitem Lib "ycode.dll" Alias "outitem" (ByVal no As Long) As String 返回值 String,返回指定项目序号的项目名字。 ----------------------------------------------------------------------------------- .DLL命令 Recognition, 整数型, "ycode.dll" 返回识别结果内存指针 [in].参数 ItemNo, 整数型 1)项目号 [in].参数 picin, 整数型 2)图片内存指针地址 [in].参数 Length, 整数型 3)指针长度 [in].参数 Address1, 文本型 4)验证码网络路径 [in].参数 Address2, 文本型 5)验证码本地路径 [out].参数 lppicout, 整数型, 传址, 6)返回:图片指针 [out].参数 lpLength, 整数型, 传址, 7)返回:指针长度 [out].参数 cLength, 整数型, 传址, 8)返回:字符长度 备注:1,将按相应的序号载入相应识别库并识别,如只有一个项目那就传1。 2+3或4或5任选一个。传递验证码图片数据或网络地址或本地图片路径,如果都不传递的话将按识别库中的默认数据获取。 VB申明: Declare Function Recognition Lib "ycode.dll" Alias "Recognition" (ByVal ItemNo As Long, ByVal picin As Long, ByVal Length As Long, ByVal Address1 As String, ByVal Address2 As String, lppicout As L
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值