【爬虫】滑块缺口识别

news2024/12/24 9:15:20

滑块示例

在这里插入图片描述
分为背景图 和 滑块图 主要目的 识别背景图滑块缺口

下载识别库

pip install opencv

code

import numpy as np
import cv2

def identify_gap(bg, tp):
    bg1 = np.asarray(bytearray(bg), dtype=np.uint8)
    tp1 = np.asarray(bytearray(tp), dtype=np.uint8)

    # 灰度
    bg_img = cv2.imdecode(bg1, cv2.IMREAD_GRAYSCALE)  # 背景图片
    tp_img = cv2.imdecode(tp1, cv2.IMREAD_GRAYSCALE)  # 缺口图片

    # 识别图片边缘
    bg_edge = cv2.Canny(bg_img, 100, 200)  # 80 255
    tp_edge = cv2.Canny(tp_img, 100, 200)

    # 识别图片边界(缺口)
    bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB)
    tp_pic = cv2.cvtColor(tp_edge, cv2.COLOR_GRAY2RGB)

    # 缺口匹配
    res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)  # 寻找最优匹配
    X = max_loc[0]  # 缺口的X轴坐标
    return X

bg为背景图 图片二进制格式
tp滑块图 图片二进制格式

实例讲解

背景图
在这里插入图片描述

滑块图
在这里插入图片描述

灰度

cv2.imdecode(bg1, cv2.IMREAD_GRAYSCALE)

执行cv2的imdecode方法 cv2.imdecode(buf, flags[, dtype])

  • buf: 图像的字节流数据,必须是一个 NumPy 数组,通常是一个 uint8 类型的数组,其内容为图像的原始字节数据。
  • flags: 指定如何读取图像。常用的值有:
    • cv2.IMREAD_COLOR: 以彩色模式加载图像。任何图像的透明度都会被忽略(这是默认标志)。
    • cv2.IMREAD_GRAYSCALE: 以灰度模式加载图像。
    • cv2.IMREAD_UNCHANGED: 包括 alpha 通道的加载图像。
  • dtype (可选): 输出的数组类型。如果省略,则根据图像的内容自动确定。

示例代码执行灰度 方便后面边界识别

未灰度的边界识别

在这里插入图片描述

执行灰度后的边界识别

在这里插入图片描述

边界识别

在这里插入图片描述
使用cv2.Canny 函数执行边界识别 如图所示成功识别出滑块的边界

edges = cv2.Canny(image, threshold1, threshold2)
  • image:待检测的灰度图像。
  • threshold1:较低的阈值,用于边缘连接。
  • threshold2:较高的阈值,用于检测强边缘。
  • edges:检测到的边缘图像,与原图大小相同,但数据类型为 uint8。

示例代码当中的cv2.Canny(bg_img, 100, 200) bg_img为传入的图片(经过灰度化之后的图片)100低阈值 200高阈值 需要根据不同的图片类型进行调整参数大小提高识别率

主要用来识别像素点的颜色变化范围,根据阈值来识别边界

缺口匹配

    # 缺口匹配
    res = cv2.matchTemplate(bg_edge, tp_edge, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)  # 寻找最优匹配
    X = max_loc[0]  # 缺口的X轴坐标

cv2.matchTemplate

cv2.matchTemplate 是 OpenCV 库中的一个函数,用于在大图像中查找与小图像(或称为模板)匹配的区域。这个函数通过比较模板图像和源图像中所有可能的位置,计算它们之间的相似度或差异度,从而找到最匹配的区域。

result = cv2.matchTemplate(image, templ, method[, result[, mask]])

  • image:源图像,即要在其中搜索模板的大图像。它可以是任意维度的灰度图像或彩色图像。
  • templ:模板图像,即要在源图像中查找的小图像。它必须与源图像具有相同的数据类型和通道数。
  • method:指定比较方法的参数,决定了如何计算源图像和模板图像之间的匹配程度。OpenCV 提供了多种匹配方法,如平方差匹配(cv2.TM_SQDIFF)、归一化平方差匹配(cv2.TM_SQDIFF_NORMED)、相关性匹配(cv2.TM_CCORR)、归一化相关性匹配(cv2.TM_CCORR_NORMED)、相关系数匹配(cv2.TM_CCOEFF)和归一化相关系数匹配(cv2.TM_CCOEFF_NORMED)。
  • result(可选):用于存储匹配结果的输出图像。如果未提供,则函数将返回一个新的矩阵作为匹配结果。
  • mask(可选):一个与模板图像同样大小的矩阵,用于指定感兴趣区域(ROI),只在该区域内进行匹配。

返回值

cv2.matchTemplate 函数返回一个与源图像大小相同的矩阵(或指定的 result 矩阵),其中每个值表示模板与源图像中相应区域的匹配程度。根据使用的匹配方法,可能需要寻找最小值或最大值来确定最佳匹配位置。

cv2.minMaxLoc

查找最佳匹配位置 使用 cv2.minMaxLoc() 函数在匹配结果矩阵中查找最小值或最大值的位置,这取决于使用的匹配方法。

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
# (-0.06119127571582794, 0.5630423426628113, (66, 16), (74, 13))
  • min_val:这是结果矩阵(result)中的最小值。根据你所使用的模板匹配方法,这个最小值可能表示最差的匹配(例如,在使用平方差匹配方法时),或者在某些情况下,它可能只是表示矩阵中的最小数值,而不直接对应于最佳或最差的匹配。
  • max_val:这是结果矩阵(result)中的最大值。对于大多数模板匹配方法,这个最大值通常表示最佳匹配的位置。例如,在使用相关性匹配(cv2.TM_CCORR)或归一化相关性匹配(cv2.TM_CCORR_NORMED)时,较高的值表示较好的匹配;而在使用平方差匹配(cv2.TM_SQDIFF)或归一化平方差匹配(cv2.TM_SQDIFF_NORMED)时,较低的值(因此是结果矩阵中的较大值,因为它们是差值的负数)表示较好的匹配。但是,由于 cv2.minMaxLoc() 返回的是正值,所以你总是会在使用平方差匹配时查找最大值来找到最佳匹配。
  • min_loc:这是一个元组,表示结果矩阵中最小值的位置(即 (x, y) 坐标)。这个位置可能对于某些分析是有用的,但在模板匹配中,它通常不是关注的重点。
  • max_loc:这也是一个元组,表示结果矩阵中最大值的位置(即 (x, y) 坐标)。这个位置对应于模板在源图像中的最佳匹配位置。你可以使用这个位置来在原图上绘制一个矩形框,标记出模板匹配的区域。
    在模板匹配中,max_val 和 max_loc 是最常用的两个返回值,因为它们直接帮助你找到模板在源图像中的最佳匹配位置和该匹配的相似度度量(通过 max_val 的值来反映)。

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

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

相关文章

MySQL 数据库 - SQL

SQL通用语法 SQL通用语法 SQL语句可以单行或者多行书写,以分号结尾。SQL语句可以使用空格/缩进来增强语句的可读性。 注意:空格和缩进的个数是没有限制的,可以是 “一个” 也可以是 “多个”。MySQL数据库的SQL语句不区分大小写,…

魔幻Vscode,紫色爱好者的福音,真正的智能代码补全

🍉一、Dracula Official(紫色爱好者的福音皮肤) Dracula Official插件,打开扩展直接搜索Dracula Official下载即可,下载完成自动换上新皮! Dracula Official 🍉二、蓝色主题的福音 Aurora X 安…

[crypt]-密码学心声

通过音乐来传递情报,乐谱如下: 乐谱中有请转成艾塞克、十进制等等,可以将数字转为assic试试,1234567,猜测是8进制,三位一组,破解如下: oct8 [111, 114, 157, 166, 145, 123, 145, …

【2024】VsCode + Latex + Linux(Ubuntu) + wsl环境下配置教程 | 包含 中文配置,和 格式化处理

前言 本篇教程是针对WSL下的Ubuntu操作系统的配置教程,它和一般的Linux环境下的配置有所不同,并且和Windows环境下的也有所不同。 本篇博客编写参考了 官方文档(Tex) 和 插件官方(Texlive Workshop) 文档…

【中项】系统集成项目管理工程师-第一模块:IT技术和管理-1.1信息与信息化-1.1.3信息化基础

前言:系统集成项目管理工程师专业,现分享一些教材知识点。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”,目前涵盖了计算机软件、计算机网络、计算机应…

NineData全面支持PostgreSQL可视化表结构设计

“PostgreSQL 是最像 Oracle 的开源关系型数据库“,也正因为如此,很多企业都青睐 PostgreSQL,拿它当成 Oracle 的替代品。所以毫无疑问,目前 PostgreSQL 在企业中非常常见。 对于直接接触 PostgreSQL 的开发人员而言,…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【26】【内网穿透】cpolar

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【27】【内网穿透】cpolar 内网穿透cpolar内网穿透联调配置练习—使用公网地址访问gulimall.com参考 内网穿透 正常的外网需要访问我们项目的流程是: 买服务器并且有公网固定…

汽车开发阶段(OTS/VFF/PVS/OS/SOP)

OTS:即英语中的Off Tooling Sample,通常被称为工装样件。它指的是通过配套设备、工装夹具以及模具制造出来的样品,但并不强调生产的时间效率,主要用于验证产品的设计能力。 VFF:在德语中表示为Vorserien Freigabefahr…

集群服务器如何解决跨服务器通信?大量并发通信问题?

Nginx tcp负载均衡模块: 1.将client的请求按照 负载均衡算法 分发到服务器 2.负载均衡器与服务器保持心跳机制,监测故障、保障服务可靠性 3.可以发现添加新的服务器,方便扩展服务器集群的数量 Nginx反向代理用途: 2.4 用途 …

大数据技术基础

一、大数据平台 1.大数据平台方案步骤: ①市场上有哪些大数据平台 ②硬件、系统、业务增长等方面 ③方案是否通过 通过后:按照一期目标投入 先虚拟环境部署联系,再实际部署 《大数据架构介绍》《Hadoop架构解析》《Hadoop集群规划》 《H…

已有nodejs的情况下安装nvm

文章目录 前言一、下载地址二、使用方法1.已安装nodejs2.未安装过nodejs3.注意事项4.测试是否安装成功5.切换nodejs版本方式 前言 作为一个前端开发人员,在一开始入行就安装了nodejs,这也是必不可少的开发环境,但总会遇到某些插件和当前node…

【保姆级】Python项目部署到Linux生产环境(uwsgi+python+flask+nginx服务器)

1.安装python 我这里是3.9.5版本 安装依赖: yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y 根据自己的需要下载对应的python版本: cd /usr/local wget https://www.python.or…

洛谷 P1056 [NOIP2008 普及组 T2]:排座椅 ← 贪心算法

【题目来源】https://www.luogu.com.cn/problem/P1056https://www.acwing.com/problem/content/436/【题目描述】 上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。 不过,班主任小雪发现了一些有趣的现象&#xff0c…

云动态摘要 2024-07-16

给您带来云厂商的最新动态,最新产品资讯和最新优惠更新。 最新优惠与活动 数据库上云优选 阿里云 2024-07-04 RDS、PolarDB、Redis、MongoDB 全系产品新用户低至首年6折起! [免费体验]智能助手ChatBI上线 腾讯云 2024-07-02 基于混元大模型打造&…

【Flask从入门到精通:第十二课:常用模块、蓝图 Blueprint】

常用模块 Faker 文档: https://faker.readthedocs.io/en/master/locales/zh_CN.html 批量生成测试数据: https://github.com/joke2k/faker pip install faker -i https://pypi.douban.com/simple代码: from flask import Flask from flask_sqlalchemy import S…

Nginx介绍、安装、使用

更多优质内容欢迎访问我的个人博客网站:www.zpf0000.com Nginx官网 官网:nginx news 什么是Nginx? Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访…

exif格式及解析库easyexif使用介绍

1. JPEG文件结构和EXIF数据的信息 JPEG文件以字符串"0xFFD8"开头表示图像信息开始,以字符串"0xFFD9"结尾表示图像信息结束。 在JPEG文件头中有一系列"0xFF??"格式的数据段,称为"标识",用来标记JPEG文件的信息段。 0xFFE0-0xFFEF之间…

SQL 获取employees中的first_name

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 现有employee…

在 PostgreSQL 里如何处理数据的存储优化和数据库备份的时间窗口冲突?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 在 PostgreSQL 中处理数据存储优化和数据库备份时间窗口冲突 在 PostgreSQL 中处理数据存储优化和数据…

智能测评养号系统:解决效率与成本难题,让测评效率翻倍

各位跨境电商从业者好,我是陈哥。今天我想和大家分享一下关于测评养号系统的一些见解和经验。 近期,不少做测评工作室的朋友向我咨询,希望能找到一种新型的测评养号系统,以解决当前面临的诸多问题,如成本高昂、效率低下、账号纯净度不够、操作不便捷等。 众所周知,测评养号系统…