OpenCV识别滑块验证码缺口

我们在利用爬虫采集数据时经常会碰到滑块验证码,下面我将通过OpenCV来识别滑块的缺口坐标。

OpenCV识别滑块验证码缺口

一、Python3安装OpenCV

安装opencv可以用pip3来安装,命令如下:

pip3 install opencv-python

如果在安装时碰到错误,可以安装下下面几个东西。

pip3 install scikit-build

pip3 install cmake

pip3 install pip -U

二、缺口识别

2.1 读取图片

滑块验证码一般有两张图片,一张背景图片,一张缺口图片。

OpenCV识别滑块验证码缺口
OpenCV识别滑块验证码缺口

可以用imread函数来读取。

bg_img = cv2.imread('bg.jpg') # 背景图片
cut_img = cv2.imread('cut.png') # 缺口图片

如果是图片流,可以用imdecode来读取。

bg_img = cv2.imdecode(np.fromstring(bg, np.uint8), cv2.IMREAD_COLOR)
cut_img = cv2.imdecode(np.fromstring(cut, np.uint8), cv2.IMREAD_COLOR)

2.2 图片处理

读取图片后,先要识别图片边缘。

bg_edge = cv2.Canny(bg_img, 100, 200)
cut_edge = cv2.Canny(cut_img, 100, 200)

然后把得到的灰度图转为RGB格式

bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB)
cut_pic = cv2.cvtColor(cut_edge, cv2.COLOR_GRAY2RGB)
OpenCV识别滑块验证码缺口
OpenCV识别滑块验证码缺口

2.3 缺口识别

缺口识别可以用模板识别matchTemplate函数

res = cv2.matchTemplate(bg_pic, cut_pic, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)  # 寻找最优匹配

max_loc就是缺口坐标,x为max_loc[0],y为max_loc[1]。

识别效果如下:

OpenCV识别滑块验证码缺口

三、最终代码

import cv2

def identify_gap(bg, cut):
    '''
    bg: 背景图片
    cut: 缺口图片
    '''
    # 读取背景图片和缺口图片
    bg_img = cv2.imread(bg)  # 背景图片
    cut_img = cv2.imread(cut)  # 缺口图片
    
    # 识别图片边缘
    bg_edge = cv2.Canny(bg_img, 100, 200)
    cut_edge = cv2.Canny(cut_img, 100, 200)
    
    # 转换图片格式
    bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB)
    cut_pic = cv2.cvtColor(cut_edge, cv2.COLOR_GRAY2RGB)
    
    # 缺口匹配
    res = cv2.matchTemplate(bg_pic, cut_pic, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)  # 寻找最优匹配
    
    # 返回缺口坐标
    return max_loc


if __name__ == '__main__':
    print(identify_gap('bgPic.jpeg', 'cutPic.png'))

发布者:糖太宗,转载请注明出处:https://www.qztxs.com/archives/science/technology/5611

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年5月7日 下午4:33
下一篇 2022年5月7日 下午10:33

相关推荐

  • HermesAgent群控系统使用教程

    HermesAgent是virjar大神写的一个Android群控系统,基于xposed+RPC实现方法级别的群控。HermesAgent是hermes系统的客户端模块,他是种植在手机里面的一个agent,同时也是一个xposed的模块插件。 一、原理 agent本身启动了一个service,agent插件模块将会自动注册钩子函数,并且和service通信。...

    2022年5月7日
    13700
  • Log4j CVE-2021-45046 复现

    漏洞描述 Apache Log4j2是一款优秀的Java日志框架。2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,经阿里云安全团队验证,Apache Struts2、Apach...

    2022年5月27日
    2200
  • xhs某书shield逆向破解(二) | unidbg

    上一篇文章中我们已经找到了生成shiled参数的Native函数,以及函数的偏移位置,这篇会讲一下如何搭建unidbg环境,如何补缺失环境,最终生成shield参数。 一、搭建unidbg环境 首先把unidbg项目拉下来(项目地址:https://github.com/zhkl0228/unidbg)。 在test中新建一个类,然后把小红书apk和对应的l...

    2022年5月21日
    57800
  • Docker 搭建Redis集群环境

    [toc] 一:启动6个Redis容器实例 --privileged=true 获取宿主机root 用户权限 --net host:使用宿主机ip和端口,默认 --cluster-enabled yes:开启redis 集群 --appendonly yes:开启持久化 docker run -d --name redis-node-1 --net host...

    技术 2022年5月9日
    1900
  • JSONP劫持

    jsonp劫持 jsonp是一个非官方的协议,全称是 JSON with Padding ,是基于 JSON 格式的为解决跨域请求资源而产生的解决方案。实现的基本原理是利用script元素的开放策略,网页可以得到从其他来源动态产生的json数据,因此可以用来实现跨域。 web程序如果通过JSONP的方式来跨域传递用户认证后的敏感信息时,攻击者完全可以在自己的...

    2022年5月27日
    4500

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信