Python对旋转图片验证码的识别和破解
本文主要使用python + selenium来破解旋转突破的验证码;其中用到numpy和OpenCV(CV2)来进行图片拼接,转换,遮罩,识别等
(二)将验证码图片与所有的图片拼接的大图比较,找到旋转角度
- 使用cv2.getRotationMatrix2D设置选择矩阵,warpAffine进行图片旋转
getRotationMatrix2D比较简单,参数为:旋转圆心坐标(x,y), 旋转角度, 放缩比例
- 使用cv2.matchTemplate来匹配图片
matchTemplate使用各种不同的方法来匹配图片,具体可以参考资料:
result = cv2.matchTemplate( img_all, img, cv2.TM_CCOEFF_NORMED)
min_max_loc = cv2.minMaxLoc(result)
其中matchTemplate的最后一个参数为匹配方法,具体说明见:https://docs.opencv.org/3.3.0/df/dfb/group__imgproc__object.html#ga3a7850640f1fe1f58fe91a2d7583695d
min_max_loc返回(匹配度和匹配位置),但是匹配度与使用的最后一个参数相关,有的匹配方法,匹配度越大越好,有的相反。在此我们使用了TM_CCOEFF_NORMED,并取min_max_loc中的maxVal,越大(接近1)越相似。
核心代码如下:
def is_existed(img_all, img, semilar=0.9):
'''
在img_all中寻找img,当相似度到达semilar时停止
参数:
img_all:
img:
semilar:相似度阀值
返回: (maxValue, maxLoc, Angle)
maxValue: 相似度- 0:不相识,1:全相似
maxLoc:最相似的位置(x,y)
Angle:转换到最相似的旋转角度
'''
if semilar <0 or semilar >1:
semilar