OpenCV滑块验证码图像缺口位置识别




1、背景描述


在使用Selenium完成自动化爬虫时,许多网站为了防止机器人爬取数据会使用验证码(例如滑块验证码)。通过Selenium动作操作,爬虫可以模拟用户输入验证码或使用鼠标移动一定距离来处理验证码验证过程

完成这一流程的关键步骤有两步:识别出目标图像缺口的位置,操作滑块滑动到对应缺口位置

而识别目标图像缺口的位置可以通过OpenCV模块实现

OpenCV模块详解见文章:传送门

2、图像缺口位置识别原理


对于滑块验证码缺口图片(如下图):

在这里插入图片描述
主要步骤包括:

  • 对滑块验证码图片进行高斯模糊滤波处理,消除部分噪声干扰
  • 对滑块验证码图片应用边缘检测算法,通过调整相应阈值识别出滑块边缘
  • 对上一步得到的各个边缘轮廓信息,通过对比面积、位置、周长等特征筛选出最可能的轮廓位置,得到缺口位置

3、图像缺口位置识别实现


3.1、导入所需模块

import cv2
import urllib.request as req
import numpy as np

3.2、高斯模糊与边缘检测

高斯滤波是用来去除图像中的一些噪声的,基本效果其实就是把一张图像变得模糊化,减少一些图像噪声干扰,从而为下一步的边缘检测做好铺垫。经过高斯滤波处理后,图像会变得模糊

由于验证码目标缺口通常具有比较明显的边缘,所以借助一些边缘检测算法并通过调整阈值可以找出它的位置。经过边缘检测算法处理后,一些比较明显的边缘信息会被保留下来

# 读取图像文件并返回一个image数组表示的图像对象
src1 = r'C:\Users\cc\Desktop\bg.png'
image = cv2.imread(src1)
print("图像大小:", image.shape)

# GaussianBlur()方法用于图像模糊化/降噪操作
# 该方法会基于高斯函数(也称正态分布)创建一个卷积核(也称滤波器),并将该卷积核应用于图像上的每个像素点
blurred = cv2.GaussianBlur(image, (5, 5), 0)

# Canny()方法用于图像边缘检测(轮廓)
# image: 输入的单通道灰度图像
# threshold1: 第一个阈值,用于边缘链接。一般设置为较小的值
# threshold2: 第二个阈值,用于边缘链接和强边缘的筛选。一般设置为较大的值
canny = cv2.Canny(blurred, 0, 100)

cv2.imwrite('canny.png', canny)
cv2.imshow('canny', canny)
cv2.waitKey(
  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值