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

yizhihongxing
  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日

相关文章

  • VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解

    我将为您详细讲解在VPS CentOS上配置python、MySQL、nginx、uwsgi和Django的方法。 安装 Python 和 MySQL 首先,我们需要在VPS CentOS中安装Python和MySQL。在终端运行以下命令: sudo yum install python3 sudo yum install mysql-server mysq…

    人工智能概览 2023年5月25日
    00
  • Django发送邮件和itsdangerous模块的配合使用解析

    下面是详细讲解”Django发送邮件和itsdangerous模块的配合使用解析”的攻略。 1. 安装依赖 在Django项目中引入邮件和itsdangerous模块,可以通过pip命令安装依赖: pip install django django-mailer itsdangerous 2. 配置邮件发送参数 在Django项目的settings文件中进行…

    人工智能概论 2023年5月25日
    00
  • pytorch中retain_graph==True的作用说明

    在使用PyTorch进行深度学习模型训练时,我们经常需要调整模型的超参数或者添加新的训练的参数,而这样的改动往往需要重新构建计算图(Computation Graph),这时候就需要设置retain_graph参数来保存计算图。 retain_graph参数 我们知道,PyTorch在进行前向传播和反向传播时都是通过计算图来实现的。计算图是由模型的输入和参数…

    人工智能概论 2023年5月25日
    00
  • IOS开发之由身份证号码提取性别的实现代码

    下面我将为大家介绍IOS开发中如何通过提取身份证号码中的信息来获取性别的实现代码攻略。 步骤一:获取身份证号码 在IOS中我们需要通过UI控件来获取用户输入的身份证号码,这里以UITextfield为例: @IBOutlet weak var idNumberInputField: UITextField! let idNumber = idNumberIn…

    人工智能概论 2023年5月25日
    00
  • Java使用OCR技术识别验证码实现自动化登陆方法

    下面我将为您详细讲解“Java使用OCR技术识别验证码实现自动化登陆方法”的完整攻略。 一、什么是OCR技术? OCR(Optical Character Recognition),即光学字符识别,是一种图像识别技术。通过OCR技术,可以将一张含有字符的图片转换成计算机可识别的文本。 二、Java中的OCR技术库 Java中提供的OCR技术库主要是tesse…

    人工智能概览 2023年5月25日
    00
  • R语言绘制饼状图代码实例

    下面是“R语言绘制饼状图代码实例”的完整攻略: 1. 准备工作 在绘制饼状图之前,必须要准备好数据。在R中,我们可以使用pie()函数来绘制饼状图。该函数需要一个向量或矩阵类型的数据作为输入。这个向量或矩阵中的每个元素表示一个扇形的大小。下面是一个简单的示例数据: data <- c(20, 30, 50) 以上数据表示饼状图中3个扇形的大小分别为20…

    人工智能概论 2023年5月25日
    00
  • VS2019配置opencv详细图文教程和测试代码的实现

    VS2019配置OpenCV详细图文教程 步骤一:下载和安装OpenCV 在OpenCV官网: https://opencv.org/releases/ 下载编译好的版本(选择 .exe 可执行文件),并双击安装。 选择合适的安装路径并在安装中选择“Add OpenCV to the system PATH for current user”和“Includ…

    人工智能概览 2023年5月25日
    00
  • python图像处理之镜像实现方法

    Python图像处理之镜像实现方法 在Python中,可以使用PIL库(Python Image Library)来进行图像处理,其中包含多种函数和方法,用于获取、处理、合成和保存图像。本次攻略将详细讲解如何使用PIL库来实现图像镜像的处理方法。 准备工作 在开始图像处理前,需要安装PIL库。可以使用pip进行安装: pip install pillow 在…

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