当前位置: 首页 > news >正文

python验证码滑块图像识别

文章目录

  • 1、案例图片
  • 1、需求说明
  • 2、代码实现
  • 总结


1、案例图片

在这里插入图片描述

1、需求说明

python 3.10,写一个滑块验证码的自动化程序。需要一个opencv的函数,能准确的计算,在这同一张图片上,滑块形状和缺口形状的坐标位置及两个形状之间在X轴上的距离。请注意,没有单独的滑块图片,而是滑块和缺口都在同一张图片上,没有分开,补充:并不存在滑块和背景两张图,滑块和缺口都在一张图上。不能用额外的滑块图片匹配,而是要在一张图上,找出两个形状一样的图,并计算坐标距离。

2、代码实现

import cv2
import numpy as npdef find_slider_and_gap(image_path):# 读取图片image = cv2.imread(image_path)if image is None:raise ValueError("Image not found or unable to read")# 转换为灰度图像gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 使用高斯模糊减少噪声blurred = cv2.GaussianBlur(gray, (5, 5), 0)# 使用Canny边缘检测edges = cv2.Canny(blurred, 50, 150)# 使用轮廓检测找到滑块和缺口contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 找到最大的两个轮廓(假设滑块和缺口是最明显的两个轮廓)contours = sorted(contours, key=cv2.contourArea, reverse=True)[:2]if len(contours) < 2:raise ValueError("Not enough contours found")# 计算轮廓的边界框slider_box = cv2.boundingRect(contours[0])gap_box = cv2.boundingRect(contours[1])# 计算滑块和缺口的中心点slider_center = (slider_box[0] + slider_box[2] // 2, slider_box[1] + slider_box[3] // 2)gap_center = (gap_box[0] + gap_box[2] // 2, gap_box[1] + gap_box[3] // 2)# 计算滑块和缺口在X轴上的距离distance_x = abs(slider_center[0] - gap_center[0])# 绘制边界框和中心点cv2.rectangle(image, slider_box, (0, 255, 0), 2)cv2.rectangle(image, gap_box, (0, 0, 255), 2)cv2.circle(image, slider_center, 5, (0, 255, 0), -1)cv2.circle(image, gap_center, 5, (0, 0, 255), -1)# 显示结果图像cv2.imshow('Result', image)cv2.waitKey(0)cv2.destroyAllWindows()return slider_center, gap_center, distance_x# 示例使用
image_path = 'path_to_your_image.png'
slider_center, gap_center, distance_x = find_slider_and_gap(image_path)
print(f"滑块中心坐标: {slider_center}")
print(f"缺口中心坐标: {gap_center}")
print(f"滑块和缺口在X轴上的距离: {distance_x}")

总结

这是我在社区问答中看到的一个问题,本人给出了回答,也很荣幸被题主采纳,这里再次记录一下,希望更多人看到。


http://www.mrgr.cn/news/67179.html

相关文章:

  • 1.接受请求,2.调用方法,3.返回对象
  • CSS基础学习篇——选择器
  • ubuntu如何卸载colmap
  • FreeSWITCH 验证
  • NVR管理平台EasyNVR多个NVR同时管理国标GB28181视频平台协议流媒体传输方式
  • C++网络编程之IO多路复用(一)
  • 基于SSM的校园美食交流系统【附源码】
  • 法语vous voulez
  • LoRA:大型语言模型(LLMs)的低秩适应;低秩调整、矩阵的低秩与高秩
  • 算法——双指针
  • C++builder中的人工智能(7)如何在C++中开发特别的AI激活函数?
  • Redis的内存淘汰机制
  • MySQL 批量删除海量数据的几种方法
  • 【算法】(Python)贪心算法
  • 解决return code from pthread_create() is 22报错问题
  • 数据结构 ——— 链式二叉树oj题:相同的树
  • mqtt 传递和推送 温湿度计消息 js
  • 盘点10款录音转文字工具,帮你开启高效记录。
  • 架构零散知识点
  • 看到你还在用Maven,Gradle难道不香吗?
  • 接口测试用例设计的关键步骤与技巧解析
  • 深度学习:循环神经网络(RNN)详解
  • openssl生成加密,公钥实现非对称加密
  • 通过 SSH 连接远程 Ubuntu 服务器
  • Uniapp全局文件执行顺序详解
  • 第11章 LAMP架构企业实战