首页 > 编程语言 >python验证码滑块图像识别

python验证码滑块图像识别

时间:2024-11-07 22:18:45浏览次数:3  
标签:box 图像识别 滑块 python image cv2 gap slider

文章目录


1、案例图片

在这里插入图片描述

1、需求说明

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

2、代码实现

import cv2
import numpy as np
 
def 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}")
 

总结

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

标签:box,图像识别,滑块,python,image,cv2,gap,slider
From: https://blog.csdn.net/qq_21419015/article/details/143580971

相关文章

  • 使用Python将EPUB电子书网文主角换成自己
    文章目录使用Python将EPUB电子书网文主角换成自己EPUB电子书准备工作操作步骤Python实现代码代码解析使用Python将EPUB电子书网文主角换成自己最近看网文小说,想到一个有意思的东西,为什么不把网文主角换成自己的名字,这样看起来不更有沉浸感,更加有代入感。于是便从e......
  • python基础——04数据类型(元组,集合,字典)
    一、元组(tuple)1.1什么是元组元组和列表相似,但元组的元素放在()里面。t=(1,2,3,4,5)print(type(t))#<class'tuple'>t1=('hello')#<class'str'>这不是元组t2=('hello',)#<class'tuple'>print(type(t1),type(t2)......
  • python小练习——条件语句if
    if语句是Python中进行条件判断的基础工具,通过它可以轻松实现逻辑选择和流程控制。掌握好if语句的使用方法,对编写高效、灵活的程序至关重要。今天我们通过七个简单的题目来熟悉一下Python中的if条件语句。1、从键盘输入年龄,判断是否大于等于18岁,如果满足就输出“已成......
  • 图像去雾+图像去雨(matlab+python)
    看到许多小伙伴想进行图像去雨,图像去雾的任务,由于以前进行了此类项目,所以在此书写博客进行交流。#去雨前言从静止图像中去除雨水是一项复杂且具有挑战性的任务。雨滴仅影响图像的很小区域,因此导致确定应考虑哪个区域和不应考虑哪个区域的混乱。在本文中,已经实现了一种新......
  • 免费送源码:python+Django+MySQL Django实验室管理系统 计算机毕业设计原创定制
    摘 要本论文主要论述了如何使用python语言、Django框架开发一个实验室管理系统,本系统将严格按照软件开发流程,进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述该系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分......
  • 使用python中的pygame简单实现飞机大战游戏
    前言在这个教程中,我们将使用Python的Pygame库来开发一个简单的飞机大战游戏。Pygame是一个开源的Python库,用于编写视频游戏。它包括计算机图形和声音库,设计目的是为游戏开发者提供一个简单易用的接口。一、环境准备在开始编码之前,请确保已经安装了Python和Pyga......
  • 三十四、Python基础语法(文件操作-上)
    一、介绍文件:可以储存在长期储存设备上的一段数据,在计算机储存的数据都是二进制的形式储存的,我们用软件打开文件不是看见0和1是因为软件会自动将二进制数据进行转换。二、文件操作1.打开文件打开文件:文件是在硬盘中储存的,打开文件可以理解为将硬盘中文件加载到内存中,在pyth......
  • 三十三、Python基础语法(面向对象其他语法-下)
    一、属性划分1.类属性类属性:类属性就是类对象具有的属性,一般写法在类内部、方法的外部定义的变量,就是类属性,类属性在内存中只有一份。可以通过类名直接访问,也可通过实例访问。classCircle:#类属性,定义圆周率pi=3.14159def__init__(self,radius):......
  • 三十、Python基础语法(继承-下)
    方法重写重写:在子类中定义和父类中名字相同的方法,如果父类中方法不能满足子类对象的需求,重写的形式有覆盖和扩展一、覆盖式重写classVehicle:defmove(self):print("Thevehicleismovinginageneralway.")classCar(Vehicle):#重写move方法......
  • 终于弄懂了Python中元组与列表的区别
    列表与元组的区别在Python编程中,列表和元组是两种非常重要的数据结构。尽管它们在许多方面具有相似性(如都可以存储任意类型的元素、都可以通过索引访问元素等),但在使用上仍有明显的区别。理解它们的不同点对于选择合适的数据结构、提高程序的性能和代码的可读性都有重要帮助......