- 简要介绍OpenCV
OpenCV是一款功能强大的开源计算机视觉库,它可以处理图像和视频数据,支持多种编程语言,在数字图像处理、计算机视觉和机器学习等领域都有广泛应用。
- 准备工作
使用Python3,需要先安装OpenCV和Requests库。
pip install opencv-python
pip install requests
- 获取验证码图片和缺口图片
为了演示方便,我们可以使用“极验”公司的滑块验证码作为例子。访问https://www.geetest.com/demo/slide 下载demo的验证码图片和缺口图片。分别命名为captcha.jpg和gap.jpg并放到代码目录下。
- 分析验证码图片
利用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) #保存二值化后的图片
- 获取缺口位置
首先需要对缺口图片进行二值化处理,然后使用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:模拟滑动滑块
为了模拟滑动滑块,我们需要使用模拟鼠标事件的库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)
该程序执行后,会自动模拟人的操作,完成拖动操作。
- 示例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技术站