python3 使用OpenCV计算滑块拼图验证码缺口位置

前言

滑块拼图验证码的失败难度在于每次图片上缺口位置不一样,需识别图片上拼图的缺口位置,使用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交流群:717225969
# 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

(0)

相关推荐

  • 基于OpenCV的显著图绘制

    重磅干货,第一时间送达 01.安装OpenCV > pipinstall opencv-python> pip install opencv-contrib-python > pyt ...

  • 基于Python的颜色识别器

    重磅干货,第一时间送达 在这篇文章中,我们将展示如何使用Python构建颜色识别器.此过程也称为"颜色检测".我们将创建一个基本应用程序,该应用程序将帮助我们检测图像中的颜色.该程 ...

  • OpenCV实战(1)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 最近 ...

  • 平安夜,Python送你一顶圣诞帽 @微信官方

    最后知道真相的我眼泪掉下来 (还蒙在鼓里的同学请在微信最上方的搜索栏自行搜索『圣诞帽』) 好吧,你不给,咱自己来,不就是个帽子嘛. Python 在手,圣诞帽我有! OpenCV 库加上几张圣诞帽图片 ...

  • 【OpenCV读取标记点坐标】管道测速

    文章目录 一.项目简介 二.思考步骤 1. 图像二值化 2. 滤波去噪 3. Canny算法检测边缘 4. 查找轮廓并计算 5. 绘制轮廓并表示质心 三.测试结果 四.工程代码 一.项目简介 昨天一个 ...

  • python+opencv读入和显示图片

    多久消失不见的本人,又回来啦!!! 这段时间换了老板,嘻嘻,也换了要学习的内容了,如此不专一,流汗中... 由于是本人兴趣爱好,更新时间不一定哦 疫情当前,请大家保重自己!!! ----------- ...

  • OpenCV探索之路(十一):轮廓查找和多边形包围轮廓

    Canny一类的边缘检测算法可以根据像素之间的差异,检测出轮廓边界的像素,但它没有将轮廓作为一个整体.所以要将轮廓提起出来,就必须将这些边缘像素组装成轮廓. OpenCV中有一个很强大的函数,它可以从 ...

  • OpenCV基础知识入门

    本文旨在让你快速入门opencv. OpenCV OpenCV是计算机视觉中最受欢迎的库,最初由intel使用C和C ++进行开发的,现在也可以在python中使用.该库是一个跨平台的开源库,是免费使 ...

  • 基于python和OpenCV构建智能停车系统

    重磅干货,第一时间送达 当今时代最令人头疼的事情就是找不到停车位,尤其是找20分钟还没有找到停车位. 根据复杂性和效率的不同,任何问题都具有一个或多个解决方案.目前智能停车系统的解决方案,主要包括基于 ...

  • 常见的图像处理技术

    重磅干货,第一时间送达 本期文章中,让我们一起来学习以下内容. 通过PIL和OpenCV来使用一些常见的图像处理技术,例如将RGB图像转换为灰度图像.旋转图像.对图像进行消噪.检测图像中的边缘以及裁剪 ...

  • (三)OpenCV图像处理

    直接 直接用霍夫直线检测,效果差; 通过图像形态学操作来寻找直线,霍夫获取位置信息与显示. #include <opencv2/opencv.hpp>#include <iostre ...

  • 基于OpenCV的车辆变道检测

    重磅干货,第一时间送达 本期教程我们将和小伙伴们一起研究如何使用计算机视觉和图像处理技术来检测汽车在行驶中时汽车是否在改变车道!大家一定听说过使用OpenCV 的haar级联文件可以检测到面部.眼睛等 ...

  • 基于OpenCV的实用图像处理操作

    重磅干货,第一时间送达 图像处理适用于图像和视频.良好的图像处理结果会为后续的进一步处理带来很大的帮助,例如提取到图像中的直线有助于对图像中物体的结构进行分析,良好的特征提取会优化深度学习的结果等.今 ...

  • 【从零学习OpenCV 4】Canny算法

    小白学视觉",选择"星标"公众号 重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为 ...

  • 《python opencv实践》一、基于颜色的物体追踪(上)

    cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]