OpenCV - 滑动拼图验证码自动识别与匹配
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV - 滑动拼图验证码自动识别与匹配相关的知识,希望对你有一定的参考价值。
参考技术A体验地址: https://www.fengkongcloud.com/trial/captcha.html
1、抓包获取前景图和背景图
2、计算前景图非透明区域的边界
计算方法: Python 图像处理:计算 PNG 非透明区域最小外接矩形
3、裁切前景图和背景图
背景图中两个相似块,以前景图的非透明边界去横切背景图,能排除干扰项
4、高斯滤波与边缘检测
为了提升图像匹配的准确性,使用高斯滤波与边缘检测算法,对图像预处理
5、模板匹配
使用 OpenCV 的 matchTemplate 匹配相似位置
QQ滑块登陆验证码识别的脚本源码
新号或者是新设备登陆QQ的时候会出现一个滑块验证。
这个验证码要求使用者根据拼图的位置,拖动滑块来将拼图还原到缺失的位置,正确还原即可完成验证。
先来看一个实际图片——
这个图就是我要解决的滑动验证图片,我需要拖动下面的滑块完成拼图。
最开始我的思路是通过找图或者找色确定拼图黑影的具体坐标,然后计算出它和前面拼图的相对距离,这个距离就是我要拖动下面滑块的距离。这样就可以完成验证了。
但是一个很难解决的问题就是我没法找到拼图黑影的位置。
为了解决这个滑块验证的问题,通过朋友介绍认识了一个技术大牛,给了我另外一个思路,就是先把验证码底图(见下图)找出来,然后和有拼图验证码(上面那张图)进行对比,颜色发生变化的区域就是拼图滑块的位置。
按照这个思路我写了下面的代码,分享给大家:
KeepCapture
Dim arr,a,t,s,n
arr = file.ReadLines("/sdcard/Pictures/shamo.txt")
For j = 0 To 83
a = Split(arr(j), "|")
s=""
For i=0 to 87
t = CmpColor(23+i*5, 166+3*j, a(i) & "-202020", 1)+1
s = s & t
Next
TracePrint s
If UTF8.InStr(1, s, "0") > 0 and UBound(split(s,"0"))>14 Then
TracePrint j
n=j+1
Exit for
End If
Next
s=""
For i = 0 To 87
a = Split(arr(n), "|")
t = CmpColor(23 + i * 5, 166 + 3 * n, a(i) & "-202020", 1) + 1
s = s & t
Next
Dim m
m = UTF8.InStrRev(s, "0", -1)*5+23
TracePrint m
ReleaseCapture
TouchDown 100, 445, 1
TouchMove m * 0.9, 445, 1, 200
TouchMove m-3, 445, 1, 1000
TouchUp 1
如果对这个脚本有什么不懂的地方,
可以加QQ交流群:78237147
以上是关于OpenCV - 滑动拼图验证码自动识别与匹配的主要内容,如果未能解决你的问题,请参考以下文章