前言

滑块拼图验证码的失败难度在于每次图片上缺口位置不一样,需识别图片上拼图的缺口位置,使用python的OpenCV库来识别到

环境准备

pip 安装 opencv-python

pip installl opencv-python

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,提供了很多处理图片、视频的方法。

OpenCV库提供了一个方法(matchTemplate()):从一张较大的图片中搜索一张较小图片,计算出这张大图上各个区域和小图相似度。

调用这个方法后返回一个二维数组(numpy库中ndarray对象),从中就能拿到最佳匹配区域的坐标。

这种使用场景就是滑块验证码上背景图片是大图,滑块是小图。

准备2张图片

场景示例

先抠出2张图片,分别为background.png 和 target.png

计算缺口位置

import cv2

# 作者-上海悠悠 QQ交流群:730246532
# blog地址 https://www.cnblogs.com/yoyoketang/ def show(name):
'''展示圈出来的位置'''
cv2.imshow('Show', name)
cv2.waitKey(0)
cv2.destroyAllWindows() def _tran_canny(image):
"""消除噪声"""
image = cv2.GaussianBlur(image, (3, 3), 0)
return cv2.Canny(image, 50, 150) def detect_displacement(img_slider_path, image_background_path):
"""detect displacement"""
# # 参数0是灰度模式
image = cv2.imread(img_slider_path, 0)
template = cv2.imread(image_background_path, 0) # 寻找最佳匹配
res = cv2.matchTemplate(_tran_canny(image), _tran_canny(template), cv2.TM_CCOEFF_NORMED)
# 最小值,最大值,并得到最小值, 最大值的索引
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) top_left = max_loc[0] # 横坐标
# 展示圈出来的区域
x, y = max_loc # 获取x,y位置坐标 w, h = image.shape[::-1] # 宽高
cv2.rectangle(template, (x, y), (x + w, y + h), (7, 249, 151), 2)
show(template)
return top_left if __name__ == '__main__':
top_left = detect_displacement("target.png", "background.png")
print(top_left)

运行效果看到黑色圈出来的地方就说明找到了缺口位置

调试完成后去掉 show 的这部分代码

  # 展示圈出来的区域
# x, y = max_loc # 获取x,y位置坐标 # w, h = image.shape[::-1] # 宽高
# cv2.rectangle(template, (x, y), (x + w, y + h), (7, 249, 151), 2)
# show(template)

缺口的位置只需得到横坐标,距离左侧的位置top_left为184

参考博客:

https://zhuanlan.zhihu.com/p/65309386

https://blog.csdn.net/weixin_42081389/article/details/87935735

https://blog.csdn.net/qq_30815237/article/details/86812716




视频课程点我 ->立即参与

python3 使用OpenCV计算滑块拼图验证码缺口位置的更多相关文章

  1. canvas验证码 - 滑块拼图

    滑块拼图型的验证方式已经流行起来,多数的实现方式是直接加载两张分割好的图片.现在用canvas去自动修剪图片,节省修图工作量和http请求: 加载一张整图,用canvas切割缺口,缺口位置在固定范围内 ...

  2. 原生js+canvas实现滑动拼图验证码

    上图为网易云盾的滑动拼图验证码,其应该有一个专门的图片库,裁剪的位置是固定的.我的想法是,随机生成图片,随机生成位置,再用canvas裁剪出滑块和背景图.下面介绍具体步骤. 首先随便找一张图片渲染到c ...

  3. js实现滑动拼图验证码

    js实现滑动拼图验证码,我这个样式是仿那些大网站做了, 学习用的,只用到前端. 小的个人网站感觉还可以用,大一点的别人用机器一下就破解了. 下面看图示: 样子大概是这样的. 源码在这 百度网盘:    ...

  4. Python3爬虫(十四) 验证码处理

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.图形验证码识别1.使用tesserocr import tesserocr from PIL import I ...

  5. iOS 滑块拼图游戏(Puzzle8)

    代码地址如下:http://www.demodashi.com/demo/11505.html 一.准备工作 先了解一个定义和定理 定义:在一个1,2,...,n的排列中,如果一对数的前后位置与大小顺 ...

  6. OpenCV入门之获取验证码的单个字符(二)

      在文章 OpenCV入门之获取验证码的单个字符(字符切割)中,介绍了一类验证码的处理方法,该验证码如下: 该验证码的特点是字母之间的间隔较大,很容易就能提取出其中的单个字符.接下来,笔者将会介绍如 ...

  7. python3配置 opencv

    python3配置 opencv 本文适用于windows 64位系统 下的Python3.5.python3.5.pip为必备前提. 配置过程: 第一步:打开cmd命令行窗口 第二步:输入pip指令 ...

  8. OpenCV:Python3使用OpenCV

    Python3使用OpenCV安装过程应该是这样的,参考:http://blog.csdn.net/lixintong1992/article/details/61617025    ,使用conda ...

  9. python3 随机生成6位数的验证码

    python3 随机生成6位数的验证码 要求是数字:0~9 及大小写字母. #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung ...

随机推荐

  1. Kubernetes中部署wordpress+mysql(六)

    经过前面的内容其实对k8s已经有了服务迁移的能力了,下面这篇文章主要是用来搭建一些后面要用的组件 一.创建wordpress命名空间 kubectl create namespace wordpres ...

  2. APschedule定时任务

    APScheduler是Python的一个定时任务框架,可以很方便的满足用户定时执行或者周期执行任务的需求, 它提供了基于日期date.固定时间间隔interval .以及类似于Linux上的定时任务 ...

  3. UCB DS100 讲义《数据科学的原理与技巧》校对活动正式启动 | ApacheCN

    贡献指南:https://github.com/apachecn/ds100-textbook-zh/blob/master/CONTRIBUTING.md 整体进度:https://github.c ...

  4. docker简介及安装(1)

    Docker简介 软件开发中最为麻烦的事情可能就是配置环境了.由于用户使用的操作系统具有多样性,即便使用跨平台的开发语言(如Java和Python)都不能保证代码能够在各种平台下都可以正常的运转,而且 ...

  5. android怎么做表格显示数据

    实现思路:最底层(父级)背景为黑色,最上层(子级)背景为白色,然后父子组件之间存在一丝间隔即可显示出类似边框的线. 本次主要利用Android中的TableRow等实现,其他类比也可以实现效果. &l ...

  6. 聊天泡泡(仿微信)By-H罗

    在做私信时,聊天泡泡仿着QQ做时,聊天泡泡底图有露出,不怎么好看,微信的就比较好看,当时就因为那2行纠结了好久 - (void)viewDidLoad { [super viewDidLoad]; / ...

  7. FLink迟到数据的处理之三

    Flink迟到的数据更新窗口计算结果,窗口销毁后的迟到数据输出到测输出流 主程序: //TODO 使用迟到的数据更新窗口的计算结果 public static void main(String[] a ...

  8. 程序员的情人节「GitHub 热点速览 v.22.07」

    又是一年情人日,刚好还是发文的今天.也没什么好送的,送点程序员的浪漫--代码和开源项目吧.记得在本周特推查收这份来自程序员的独有浪漫. 本周 GitHub 霸榜的项目基本上都是老项目,从老项目中挖点新 ...

  9. linxu 查看运行日志

    journalctl - 检索 systemd 日志 journalctl 可用于检索 systemd(1) 日志(由 systemd-journald.service(8) 记录). 如果不带任何参 ...

  10. 10、Linux基础--find、正则、文本过滤器grep

    笔记 1.晨考 1.每个月的3号.5号和15号,而且这天是星期六时执行 00 00 3,5,15 * 6 2.每天的3点到15点,每隔3分钟执行一次 */3 3-15 * * * 3.每周六早上2点半 ...