本例演示使用VBScript对简单规则的图形验证码进行识别,先对图片进行二值化处理,此时图片成为了一张黑白图,然后对图片背景去噪,去除干扰像素,再对字符进行分离,最后把分离出的每个字符和标准字典进行对比,找出差异最小的,识别成功。

原始图片:

处理后的图片:

二值化后:

去噪后:

分离后:

运行效果:

'***************************************************************
'Written by D.L.
'***************************************************************
Option Explicit'验证码图片本地磁盘保存名称
Const FILENAME_SAVE = "captcha.png"
Const FILENAME_SAVE2 = "captcha2.png"'二值化时RGB阈值
Const g_R = &H80
Const g_G = &H80
Const g_B = &H80Dim Standard        '标准字符特征字典
Dim Width, Height   '图像宽高
Dim Vector          '图像的ARGB数据
Dim label           '和Vector对应的标记
Dim nTimes          '递归调用次数
Dim Ar              '连通域面积'根据网上查找的色彩心理学公式:
'$colorLevel = $r * 0.299 + $g * 0.587 + $b * 0.114;
'所以我们可以通过$grayLevel来判断此颜色的深浅,$grayLevel的值越小,则颜色越深。
Function colorLevel(r, g, b)colorLevel = r * 0.299 + g * 0.587 + b * 0.114
End Function'根据像素color得到ARGB分量
Function getARGB(ByVal color, ByRef a, ByRef r, ByRef g, ByRef b)a = CByte(((color And &HFF000000) / 2 ^ (8 * 3)) And &HFF)r = CByte((color And &HFF0000) / 2 ^ (8 * 2))g = CByte(((color And &HFF00) / 2 ^ (8 * 1)) And &HFF)b = CByte((color And &HFF) / 2 ^ (8 * 0))
End Function'根据矩形坐标得到v中矩形区域的标记序列
Function getMarkSequenceFromRect(v, x1, y1, x2, y2)Dim i, jDim strSeq: strSeq = ""For j = y1 To y2For i = x1 To x2If (v((j - 1) * Width + i) = &HFF000000) ThenstrSeq = strSeq & "■"ElsestrSeq = strSeq & "□"End IfNextstrSeq = strSeq & vbNewLineNextgetMarkSequenceFromRect = strSeq
End Function'得到v的标记序列
Function getMarkSequence(v)Dim i, jDim strSeq: strSeq = ""For j = 1 To HeightFor i = 1 To WidthIf v((j - 1) * Width + i) = &HFF000000 ThenstrSeq = strSeq & "■"ElsestrSeq = strSeq & "□"End IfNextstrSeq = strSeq & vbNewLineNextgetMarkSequence = strSeq
End Function'二值化
Function binaryzation(v)Dim i, jDim r, g, b, aFor i = 1 To WidthFor j = i To v.Count Step WidthCall getARGB(v(j), a, r, g, b)'Debug.Print r, g, b, a'If colorLevel(r, g, b) < colorLevel(&H80, &H80, &H80) ThenIf r < g_R And g < g_G And b < g_B ThenVector(j) = &HFF000000ElseVector(j) = &HFFFFFFFFEnd IfNextNext
End Function'参考:
'————————————————
'网页验证码识别实例VB.NET2019(二)_mengxiangde的博客-CSDN博客
'版权声明:本文为CSDN博主「mengxiangde」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
'原文链接:https://blog.csdn.net/mengxiangde/article/details/102980244
'
'八邻域去噪
Function denoise8Neighbours(v, number)Dim x, yDim ix, iyDim c'将边框标记为背景
'   For X = 1 To Width '上下边取白色'       v(X)=&HFFFFFFFF
'       v((Height-1)*Width+X)=&HFFFFFFFF
'   Next'   For Y = 1 To Height'左右边取白色'       v((Y-1)*Width+1)=&HFFFFFFFF
'       v((Y-1)*Width+Width)=&HFFFFFFFF
'   Next'逐点检测,判断某前景元素相邻的八个元素的颜色For y = 1 To HeightFor x = 1 To Widthc = 0If v((y - 1) * Width + x) = &HFF000000 Then '黑点'计算八邻域For ix = x - 1 To x + 1For iy = y - 1 To y + 1If (ix >= 0 And ix <= Width - 1) And (iy >= 0 And iy <= Height - 1) ThenIf ix = x And iy = y Then '自己Else '左上、左、左下、上、下、右上、右、右下If v((iy - 1) * Width + ix) = &HFF000000 Then c = c + 1 '发现黑点则计数+1End IfEnd IfNextNext'如果当前元素八邻域中前景元素计数小于等于number,则标记该元素为背景If c <= number Then v((y - 1) * Width + x) = &HFFFFFFFFEnd IfNextNext
End Function'连通域去噪
Function denoiseConnectedComponents(v, limit)ReDim label(v.Count)Dim i, jDim ca          '存放连通域面积Dim Cr: Cr = 0  '存放连通域使用的标记(不同的连通域使用不同的标记)Dim dicArea     '字典,元素为<连通域标记,连通域面积>Set dicArea = CreateObject("Scripting.Dictionary")'计算v中的所有连通域For i = 1 To WidthFor j = 1 To HeightIf label((j - 1) * Width + i) = 0 Then '之前没有被标记If v((j - 1) * Width + i) = &HFF000000 Then '黑点Cr = Cr + 1 '变化标记label((j - 1) * Width + i) = Cr '标记之ca = connectedComponents(v, i, j, Cr) '计算连通域Debug.WriteLine "<标记,面积>" & vbTab & "<" & cr & "," & ca & ">"dicArea.Add Cr, ca '加入字典Elselabel((j - 1) * Width + i) = -1 '标记背景End IfEnd IfNextNext'将面积小于等于limit的连通域标记为背景For i = 1 To WidthFor j = 1 To HeightIf label((j - 1) * Width + i) > 0 ThenIf dicArea(label((j - 1) * Width + i)) <= limit Thenv((j - 1) * Width + i) = &HFFFFFFFFEnd IfEnd IfNextNextSet dicArea = NothingErase label
End Function'根据给定坐标(X,Y)计算其在v中的连通域,并使用Cr标记该连通域
'本例中使用上下左右四邻域来计算连通域
Function connectedComponents(v, x, y, Cr)Dim ix, iyIf nTimes = 0 Then Ar = 1nTimes = nTimes + 1'On Error Resume NextFor ix = x - 1 To x + 1For iy = y - 1 To y + 1If (ix >= 0 And ix <= Width - 1) And (iy >= 0 And iy <= Height - 1) ThenIf ix = x And iy = y Then '自己ElseIf ix <> x And iy <> y Then '左上、左下、右上、右下Else '上下左右If label((iy - 1) * Width + ix) = 0 Then '之前没有被标记If v((iy - 1) * Width + ix) = &HFF000000 Then '黑点Ar = Ar + 1 '面积+1label((iy - 1) * Width + ix) = Cr '标记之Call connectedComponents(v, ix, iy, Cr) '递归调用Elselabel((iy - 1) * Width + ix) = -1 '标记背景End IfEnd IfEnd IfEnd IfNextNextnTimes = nTimes - 1If nTimes = 0 Then '递归完毕connectedComponents = ArAr = 0End If
End Function'参考:
'————————————————
'标题: VBS也玩验证码识别
'作者: Demon
'链接: http://demon.tw/programming/vbs-authcode.html
'版权: 本博客的所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。
'
'分离字符并逐一识别
Function getIdentifiedString(v)Dim x1, y1Dim x2, y2Dim xMin, xMax, yMin, yMaxDim x, yDim iDim outDim ItemDim differenceDim leastDiffDim code    '存储每个字符的像素序列Dim oDic    '存储对比差异信息,元素为<差异像素计数,标准字符>Set code = CreateObject("WIA.Vector")Set oDic = CreateObject("Scripting.Dictionary")'得到每个字符所在最小矩形的坐标For x1 = 1 To WidthFor y1 = 1 To HeightIf v((y1 - 1) * Width + x1) = &HFF000000 ThenIf xMin = 0 Then xMin = x1xMax = x1Exit ForEnd IfNextIf xMin > 0 And (x1 - xMax > 0 Or x1 = Width) Then '横向范围找到'计算对应的纵向范围For y2 = 1 To HeightFor x2 = xMin To xMaxIf v((y2 - 1) * Width + x2) = &HFF000000 ThenIf yMin = 0 Then yMin = y2yMax = y2Exit ForEnd IfNextNext'矩形的坐标已找到Debug.WriteLine "(" & xmin & "," & ymin & ")-(" & xmax & "," & ymax & ")" & vbTab & xmax-xmin+1 & "*" & ymax-ymin+1'====字符识别 start==============================================================='逐行将每个像素添加到code中code.ClearFor y = yMin To yMaxFor x = xMin To xMaxcode.Add v((y - 1) * Width + x)NextNextDebug.WriteLine getMarkSequenceFromRect(v,xmin,ymin,xmax,ymax)'得到像素序列out = ""For i = 1 To code.Countout = out & "&H" & Hex(code(i)) & ","Nextout = Mid(out, 1, Len(out) - 1)Debug.WriteLine "Standard(""?"") = Array(" & out & ")"'与标准字符进行对比oDic.RemoveAllFor Each Item In Standarddifference = 0For i = 1 To code.Count'这里数组可能会越界,所以要'On Error Resume NextIf i - 1 <= UBound(Standard(Item)) ThenIf code(i) <> Standard(Item)(i - 1) Thendifference = difference + 1End IfEnd IfNextoDic(difference) = ItemDebug.WriteLine Item & " difference:" & differenceNext'筛选出最匹配的leastDiff = -1For Each Item In oDicIf leastDiff = -1 ThenleastDiff = ItemElseIf Item < leastDiff Then leastDiff = ItemEnd IfNextgetIdentifiedString = getIdentifiedString & oDic(leastDiff)'====字符识别 end==============================================================='归位,继续寻找下一个字符yMin = 0xMin = 0End IfNext
End Function'识别验证码
Sub identifyVerifyCode()Dim Image 'As WIA.ImageFileDim IP 'As WIA.ImageProcessDim fso'初始化标准字符特征字典Set Standard = CreateObject("Scripting.Dictionary")Standard.Add "9", Array(&HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF)Standard.Add "8", Array(&HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF)Standard.Add "7", Array(&HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF)Standard.Add "6", Array(&HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF)Standard.Add "5", Array(&HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF)Standard.Add "4", Array(&HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF)Standard.Add "3", Array(&HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF)Standard.Add "2", Array(&HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000)Standard.Add "1", Array(&HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFF000000)Standard.Add "0", Array(&HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &HFF000000, &HFF000000, &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF)'取图'score_captchaSet Image = CreateObject("WIA.ImageFile")'加载图片Image.LoadFile FILENAME_SAVE'图片宽高Width = Image.WidthHeight = Image.Height'Debug.WriteLine Vector.Count = Width * HeightSet Vector = Image.ARGBData'二值化Call binaryzation(Vector)'二值化后展示Debug.WriteLine getMarkSequence(Vector)'去噪'Call denoise8Neighbours(Vector,1)Call denoiseConnectedComponents(Vector, 10)'去噪后展示Debug.WriteLine getMarkSequence(Vector)'识别WScript.Echo getIdentifiedString(Vector)'保存处理后的图片Set fso = CreateObject("Scripting.FileSystemObject")If fso.FileExists(FILENAME_SAVE2) Then fso.DeleteFile FILENAME_SAVE2, 1Set fso = NothingSet IP = CreateObject("WIA.ImageProcess")IP.Filters.Add IP.FilterInfos("ARGB").FilterIDIP.Filters(1).Properties("ARGBData") = VectorSet Image = IP.Apply(Image)Image.SaveFile FILENAME_SAVE2Set IP = NothingSet Image = Nothing
End Sub'调用
identifyVerifyCode

VBS识别网页验证码相关推荐

  1. 牛逼了啊!用 JS 实现了识别网页验证码的功能!

    点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 作者:LeoNaN https://zhuanlan.zhihu.com/p/28483558 很高兴大家喜欢!Github:leonof ...

  2. 太赞了!用 JS 实现了识别网页验证码的功能!

    点击上方蓝字关注前端瓶子君,从此前端进阶不再难 文章转载自:LeoNaN,文末有原文链接. 很高兴大家喜欢!Github:leonof/imgRecJs[1],刚刚上传,代码还需要完善-因为有不少同学 ...

  3. python反爬虫应对之借助平台超级鹰突破网页验证码识别

    在爬虫过程中,有些网页需要登录才能获取里面的数据,在大部分的登录过程中,都会需要一个叫验证码识别,目前的网页有各种各样的验证码,有数字加字母的组合,有物品识别等等 在代码进行网页爬取过程中,如果由人为 ...

  4. 验证码按钮的html代码,验证码识别-网页操作-脚本手册-VG自动化神器 - 原VG浏览器,VG网页操作神器...

    一. 功能介绍 对网页上出现的验证码进行处理,可以由用户手动输入验证码,也可以自动识别验证码. 二. 配置验证码 对网页上出现的验证码进行处理,可以由用户手动输入验证码,也可以自动识别验证码. 在使用 ...

  5. python获取网页验证码_Python识别网站验证码

    http://drops.wooyun.org/tips/6313 Python识别网站验证码 Manning · 2015/05/28 10:57 0x00 识别涉及技术 验证码识别涉及很多方面的内 ...

  6. Python - WebDriver 识别登录验证码

    Python - WebDriver 识别登录验证码 没什么可说的直接上代码! #-*-coding:utf-8-*- # Time:2017/9/29 7:16 # Author:YangYangJ ...

  7. 使用第三方打码平台图鉴识别滑动验证码模拟登录

    文章目录 一.图鉴的账户注册 识别流程 二.欧模网案例滑动验证码模拟登录 页面分析 三.代码分析 四.欧模网案例展示 总结 一.图鉴的账户注册 图鉴网页地址: http://www.ttshitu.c ...

  8. python 识别登陆验证码图片(完整代码)

    在编写自动化测试用例的时候,每次登录都需要输入验证码,后来想把让python自己识别图片里的验证码,不需要自己手动登陆,所以查了一下识别功能怎么实现,做一下笔记. 首选导入一些用到的库,re.Imag ...

  9. 增强版!如何深度学习识别滑动验证码缺口

    这是「进击的Coder」的第 394 篇技术分享 作者:崔庆才 来源:崔庆才丨静觅 之前的文章中其实已经提到过如何使用深度学习来识别滑动验证码缺口,文章见利用 Python 深度学习识别滑动验证码缺口 ...

最新文章

  1. c++ 判断nil_golang A=nil,B=A,but B!=nil 这是真的
  2. matplotlib的下载和安装方法
  3. PAT甲级1083 List Grades:[C++题解]结构体、排序
  4. java bip-39_bip39
  5. oracle里有limit怎么用,[ORACLE]ORACLE 实现mysql中的limit 功能
  6. Linux下memcache的安装和启动(很好)
  7. linux的定制和发布(二)
  8. Search in Rotated Sorted Array II
  9. 【JavaScript】一个同步于本地时间的动态时间
  10. kotlin函数_Kotlin函数
  11. 区块链 PBFT 哪个节点 谁负责打包区块
  12. 一图看懂什么是集成电路?
  13. 卡尔曼滤波-卡尔曼滤波全篇讲解
  14. 基于CST电磁仿真软件的波导弯头设计
  15. 前端批量打包下载图片_个人总结 _@jie
  16. HTML语言全称叫超文本标记语言,其中的“标记“如何理解,“超文本”又如何理解?
  17. GEE_List基础总结
  18. 相关性的显著性检验——cocor package
  19. 一位深圳创业者说:别找腾讯的技术,难伺候
  20. 12|引擎分片:Elasticsearch如何实现大数据检索?

热门文章

  1. 使用sklearn实现birch聚类分析
  2. 用python解答计算小明成绩提升的百分点
  3. 学计算机的会excel,轻松学电脑开机即会--EXCEL电子表格商务办公应用(附光盘)
  4. 使用长焦镜头拍摄VR全景的技巧
  5. mybatis源码-plugin源码
  6. 【阅读笔记】技术前沿(视觉-语言预训练、能量模型)
  7. 【编码译码】基于matlab QC-LDPC码编码和译码【含Matlab译码 2194期】
  8. Go语言实现区块链与加密货币-Part3(交易优化,单机模拟多节点通信)
  9. 集线器,转发器,网桥,以太网交换机
  10. 老java程序员告诉你要不要选择外包,外包公司的好处你知道吗