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

OpenCV图像缺口位置识别

    • 1、背景
    • 2、图像缺口位置识别原理
    • 3、图像缺口位置识别实现
    • 4、滑块验证码HTTP图像需要保存到本地吗


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(url)
print("图像大小:", image.shape)# GaussianBlur方法进行图像模糊化/降噪操作
# 它基于高斯函数(也称为正态分布)创建一个卷积核(或称为滤波器),该卷积核应用于图像上的每个像素点
blurred = cv2.GaussianBlur(image, (5, 5), 0)# Canny方法进行图像边缘检测(轮廓)
# image: 输入的单通道灰度图像
# threshold1: 第一个阈值,用于边缘链接。一般设置为较小的值
# threshold2: 第二个阈值,用于边缘链接和强边缘的筛选。一般设置为较大的值
canny = cv2.Canny(blurred, 0, 100

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/163815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端工程、静态代码、Html页面 打包成nginx 的 docker镜像

1. 创建一个 mynginx的目录 2. 将前端代码文件夹(比如叫 front )复制到 mynginx 目录下 3. 在mynginx 目录下创建一个名为Dockerfile 的文件(文件名不要改),文件内容如下: # 使用官方的 Nginx 镜像作为基…

神经网络训练技巧

1. 逐渐增加训练数据规模,比如先在小数据集上训练,之后再增大数据集继续训练。

网站权重是什么意思

网站权重是指搜索引擎对网站的评估指标,用以衡量网站的重要性 搜索引擎会根据网站权重来决定网站在搜索结果中的排名和位置,从而决定其在搜索中的可见度 网站权重是多方面因素的综合评估,其中主要包括网站内容质量、外部链接量及质量、网站…

JS逆向之wasm逆向(二)

本文仅供技术交流和技术学习 不做其他用途 接着上一篇继续讲: 上篇地址: JS逆向之wasm逆向(二进制) 网址: aHR0cHM6Ly93d3cuN3E2Y3lqLmNvbTo5MDAxL3JlZ2lzdGVyNDY5Njg/aV9jb2RlPTQ0Mjc5OTU1 这个网站我们后面可以继续讲他的debugger 和滑块…

[点云分割] Clustering of Pointclouds into Supervoxels

介绍 “Clustering of Pointclouds into Supervoxels” 是一种点云数据聚类的方法,用于将点云数据分割成具有相似特征的超体素(supervoxel)。 超体素是一种在点云数据中表示连续区域的方法,类似于像素在图像中表示连续区域。超体…

C 语言 http通信

1,C语言本身不包含直接支持HTTP协议的功能,但你可以使用第三方库来实现HTTP客户端或服务器。 以下是一些常用的C语言HTTP库: libcurl:一个支持多种协议的开源库,包括HTTP、HTTPS、FTP等。它提供了一组简单的API&…

因果发现31种高效经典方案汇总,附配套算法和代码

因果发现(Causal Discovery)是一个复杂的过程,其目标是从大量的数据中确定变量之间的因果关系。这个过程通常涉及到的是如何从纷繁复杂的数据中发现其中隐含的因果关系。有时,研究者可以通过随机实验进行干预来发现因果关系&#…

解决PDF预览时,电子签章、日期等不显示问题

文章目录 问题描述问题排查问题解决 问题描述 在预览PDF时,部分签章或控件没有显示。如下图: 正确应该要这样: 问题排查 根据网上搜索,排查,我先看看,pdf.worker.js 里的这三行代码,是否已经注…

JVM 类加载

① 类加载过程 从上面的图片我们可以看出整个 JVM 执行的流程中,和程序员关系最密切的就是类加载的过程了,所以 接下来我们来看下类加载的执行流程。 对于一个类来说,它的生命周期是这样的: 其中前 5 步是固定的顺序并且也是类加载…

Android : Spinner(列表选项框) + BaseAdapter -简单应用

​​容器与适配器:​​​​​ http://t.csdnimg.cn/ZfAJ7 示例图: 实体类 Demo.java package com.example.mygridviewadapter.entity;public class Demo {private String text;private int img;public Demo(String text, int img) {this.text…

虚拟机解决Linux中Uos和Deepin登录密码忘记的问题 标题Linux Uos Deepin

Uos是切换网络模式解决的(之前有绑定过用户) 因为之前用的是桥接模式登录的时候一直无法联网,改为Nat模式后可以和电脑共用一个网络ip,可以重置密码了,以此解决 ps: 特别说明rw single init/bin/bash 方法和systemd.debug-shell1方法已经失效,不要再做无谓的尝试了Deepin23社区…

Vue + Element UI 实现复制当前行数据功能(复制到新增页面组件值不能更新等问题解决)

1、需求 使用Vue Element UI 实现在列表的操作栏新增一个复制按钮&#xff0c;复制当前行的数据可以打开新增弹窗后亦可以跳转到新增页面&#xff0c;本文实现为跳转到新增页面。 2、实现 1&#xff09;列表页 index.vue <el-table> <!-- 其他列 --> <el-t…

JOSEF 漏电继电器 LLJ-100FG φ45 50-500mA 卡轨安装

系列型号&#xff1a; LLJ-10F(S)漏电继电器LLJ-15F(S)漏电继电器LLJ-16F(S)漏电继电器 LLJ-25F(S)漏电继电器LLJ-30F(S)漏电继电器LLJ-32F(S)漏电继电器 LLJ-60F(S)漏电继电器LLJ-63F(S)漏电继电器LLJ-80F(S)漏电继电器 LLJ-100F(S)漏电继电器LLJ-120F(S)漏电继电器LLJ-125F(S…

推荐一个简单的在线压缩PNG和JPG图片大小的网址

问题描述&#xff1a;推荐一个简单的在线压缩PNG和JPG图片大小的网址 解决&#xff1a; https://www.iloveimg.com/zh-cn/compress-image/compress-png

将对象转成URL参数

背景 有的时候前端跳转到其他平台的页面需要携带额外的参数&#xff0c;需要将对象转成用 & 连接的字符串拼接在路径后面。 实现方法

C++中对SQLite进行增删改查

#include <iostream> #include <sqlite3.h>// 创建数据库连接 sqlite3* OpenDatabase(const char* dbFilePath) {sqlite3* db;// 打开数据库if (sqlite3_open(dbFilePath, &db) ! SQLITE_OK) {std::cerr << "Error opening database." <<…

HTTP ERROR 403 No valid crumb was included in the request

1、报错截图&#xff1a; 2、产生原因&#xff1a; 开启了csrf&#xff0c;即跨站请求伪造 3、新版本不支持页面修改&#xff0c;故需要修改jenkins配置文件 3.1 进入编辑配置文件 vim /etc/sysconfig/jenkins 3.2 修改JENKINS_JAVA_OPTIONS&#xff0c;并保存修改 JENKI…

深度学习之四(循环神经网络Recurrent Neural Networks,RNNs)

概念 循环神经网络(Recurrent Neural Networks,RNNs)是一类专门用于处理序列数据的神经网络,它在处理时考虑了序列数据的顺序和上下文信息。RNNs 在自然语言处理、时间序列分析、语音识别等领域得到广泛应用。 1. 基本结构: RNN 的基本结构包含一个或多个循环单元,每个…

Ubuntu 系统上使用 QQ 邮箱的 SMTP 服务器发送邮件,msmtp(已验证)

安装 msmtp sudo apt-get update sudo apt-get install msmtp2 .配置 msmtp nano ~/.msmtprcdefaults auth on tls on tls_starttls on tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile ~/.msmtp.logaccount qq host …

Lua脚本解决redis实现的分布式锁多条命令原子性问题

线程1现在持有锁之后&#xff0c;在执行业务逻辑过程中&#xff0c;他正准备删除锁&#xff0c;而且已经走到了条件判断的过程中&#xff0c;比如他已经拿到了当前这把锁确实是属于他自己的&#xff0c;正准备删除锁&#xff0c;但是此时他的锁到期了&#xff0c;那么此时线程2…