python3 使用OpenCV计算滑块拼图验证码缺口位置(场景示例)

  1. 简要介绍OpenCV

OpenCV是一款功能强大的开源计算机视觉库,它可以处理图像和视频数据,支持多种编程语言,在数字图像处理、计算机视觉和机器学习等领域都有广泛应用。

  1. 准备工作

使用Python3,需要先安装OpenCV和Requests库。

pip install opencv-python
pip install requests
  1. 获取验证码图片和缺口图片

为了演示方便,我们可以使用“极验”公司的滑块验证码作为例子。访问https://www.geetest.com/demo/slide 下载demo的验证码图片和缺口图片。分别命名为captcha.jpg和gap.jpg并放到代码目录下。

  1. 分析验证码图片

利用OpenCV将图片转换成灰度图,再进行二值化处理,最终得到黑白图片。可以使用threshold函数实现。具体代码如下:

import cv2

img = cv2.imread('captcha.jpg',0) #读取灰度彩色图像
ret,thresh = cv2.threshold(img,127,255,cv2.THRESH_BINARY) #二值化处理
cv2.imwrite('captcha_binary.jpg', thresh) #保存二值化后的图片
  1. 获取缺口位置

首先需要对缺口图片进行二值化处理,然后使用matchTemplate函数在验证码图片中寻找最佳匹配的位置。该函数返回一个灰度图像,其中亮度表示匹配程度。最后我们可以使用minMaxLoc函数获取最佳匹配位置的坐标。

import cv2
import numpy as np

captcha = cv2.imread('captcha_binary.jpg',0)
gap = cv2.imread('gap.jpg',0)

res = cv2.matchTemplate(captcha,gap,cv2.TM_CCOEFF_NORMED)
threshold = 0.7
loc = np.where(res >= threshold)
for pt in zip(*loc[::-1]):
    print(pt[0],pt[1])

输出结果为(104, 39),即缺口位置在验证码图片中的x、y坐标。

  1. 示例1:模拟滑动滑块

为了模拟滑动滑块,我们需要使用模拟鼠标事件的库pyautogui。通过pyautogui定位到滑块的中心位置,然后移动鼠标,最后释放鼠标完成滑动操作。

import pyautogui

#获取滑块中心位置
center_x = 107 + int(gap.shape[1]/2)
center_y = 44 + int(gap.shape[0]/2)

#移动鼠标到滑块中心位置
pyautogui.moveTo(center_x, center_y)

#移动到拼图缺口位置
pyautogui.dragRel(104-center_x, 39-center_y, duration=1)

该程序执行后,会自动模拟人的操作,完成拖动操作。

  1. 示例2:从网络获取验证码
import requests
from io import BytesIO

#获取验证码和缺口图片
url = 'https://www.geetest.com/demo/slide'
response = requests.get(url)
captcha_url = 'https://static.geetest.com/'+response.json()['data']['bg']
gap_url = 'https://static.geetest.com/'+response.json()['data']['fullbg']

captcha = Image.open(BytesIO(requests.get(captcha_url).content))
captcha.save('captcha.jpg')
gap = Image.open(BytesIO(requests.get(gap_url).content))
gap.save('gap.jpg')

该程序会从网络获取验证码和缺口图片,然后使用上述的方法生成滑块验证码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python3 使用OpenCV计算滑块拼图验证码缺口位置(场景示例) - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • 在Django的视图中使用form对象的方法

    在Django的视图中使用Form对象可以实现对表单数据的有效验证。本文将介绍如何利用Form对象在Django的视图中实现表单验证并处理表单数据的方法。 1.创建Form类 首先,我们需要创建一个Form类来定义表单的各个字段及其验证规则。以一个用户注册表单为例: from django import forms class RegisterForm(fo…

    人工智能概览 2023年5月25日
    00
  • Python实现异步IO的示例

    Python实现异步IO可以使用asyncio模块来实现。以下是Python实现异步IO的完整攻略: 什么是异步IO 异步IO是一种非阻塞式的IO模型,在这种模型中,一个应用程序可以在执行IO操作时,同时处理其他任务。相对于传统的同步IO模型,异步IO模型可以更大程度地提高程序的整体性能。 asyncio模块 Python提供了asyncio模块来支持异步I…

    人工智能概论 2023年5月25日
    00
  • 微服务链路追踪Spring Cloud Sleuth整合Zipkin解析

    让我们来详细讲解一下微服务链路追踪Spring Cloud Sleuth整合Zipkin解析的完整攻略。 1. 简介 在微服务架构中,单个请求可能需要经过多个服务的处理,因此如何快速定位服务中的问题变得尤为重要。这时候,我们就需要用到微服务链路追踪技术,它可以帮助我们快速地找到问题服务,并定位问题所在。 Spring Cloud Sleuth是针对微服务架构…

    人工智能概览 2023年5月25日
    00
  • Django学习之静态文件与模板详解

    下面是关于Django学习之静态文件与模板详解的完整攻略: 1. 静态文件 1.1 静态文件的定义 静态文件是指能够直接被服务器返回的文件,如样式文件(CSS)、脚本文件(JavaScript)、图片(Image)等。 1.2 静态文件的管理 在Django中,需要在项目中的static文件夹中存放静态文件,并在相应的HTML模板中使用相应的标签进行引用。 …

    人工智能概览 2023年5月25日
    00
  • 小白也可以完成的0基础部署Nginx服务

    下面是小白也可以完成的0基础部署Nginx服务的完整攻略。 步骤一:安装Nginx 在Ubuntu系统下使用如下命令安装Nginx: sudo apt-get update sudo apt-get install nginx 安装完成后,输入以下命令启动Nginx: sudo systemctl start nginx 可以使用以下命令验证Nginx进程是…

    人工智能概览 2023年5月25日
    00
  • 详解四种Python中基本形态学滤波的实现

    详解四种Python中基本形态学滤波的实现 形态学滤波是一种非线性信号处理方法,可以去除图像中的噪声。本文将会详细介绍Python中实现形态学滤波的四种基本方法,包括腐蚀、膨胀、开运算和闭运算。 一、腐蚀 腐蚀是形态学滤波中的一种,它通过将图像中的亮点区域缩小来去掉噪声。腐蚀操作可以用以下Python代码实现: import numpy as np impo…

    人工智能概览 2023年5月25日
    00
  • 详解Nginx中基本的内存池初始化配置

    下面是针对 “详解Nginx中基本的内存池初始化配置” 的攻略: 什么是内存池 内存池是类似于内存地址管理的一个机制,在Nginx中起到了非常重要的作用。Nginx的内存池是针对每一种数据结构而定的内存分配器,使用内存池可以让Nginx服务器在高并发下的性能得到更好的保障,防止了不同线程之间的拥抢内存和内存泄漏。 Nginx内存池的基本配置 在Nginx中,…

    人工智能概览 2023年5月25日
    00
  • docker容器因报错无法启动问题的检查及修复容器错误并重启

    针对“docker容器因报错无法启动问题的检查及修复容器错误并重启”的完整攻略,下面是具体步骤。 1. 检查容器错误 当你遇到无法启动的Docker容器时,首先要查询相应的日志并检查容器中的问题。以下是一些有效的检查方法: (1) 使用docker logs命令查看容器日志 docker logs <容器名或ID> 该命令将显示该容器的日志记录,…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部