Python+PIL计算两个图像的相似度并返回第一个不匹配的像素的x坐标(附完整版代码)

news2024/11/18 21:47:42

前言

前几天看到一篇文章写Python+selenium+超级鹰对滑块验证码的操作,大致的思想如下:

1、就是将滑块验证码进行截图

2、利用超级鹰的API进行对图片的处理,

3、返回滑块的距离

我在很久之前也遇到过类似的需求, 当时我的好友帮我写了一个代码,是利用PIL对两张图片进行像素点分析,从而返回两张图片x轴的像素点

举个列子,如下,我有两张图片:

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

这两张图片是一模一样的,第二张我故意划了一条数显,现在我需要知道,第一张与第二张对比,从而得知x轴的长度

在这里插入图片描述

好,废话不多说开始代码部分

安装
Pillowpip install Pillow

具体实现如下来自(文心一言注释):

这段代码的功能是计算两个图像的相似度,并返回第一个不匹配的像素的 x 坐标。

1、导入 Image 模块,该模块是 PIL (Python Imaging Library) 的一部分,用于处理图像。

2、定义了一个名为 get_gap 的函数,它接受两个图像对象 image1image2 作为参数,用于计算两个图像的相似度。

3、在 *get_gap*函数中,定义了一个变量 left 并初始化为 0,用于记录不匹配的像素的 x 坐标。

4、使用两层循环遍历 image1 的每个像素,并比较与 image2 相应位置的像素是否相等。

5、如果发现两个像素不相等,即调用 is_pixel_equal 函数判断两个像素是否相似。

6、is_pixel_equal 函数接受两个图像对象 image1image2,以及要比较的像素坐标 (x, y)

7、在*is_pixel_equal* 函数中,通过 image1.load()[x, y] 和 *image2.load()[x, y]*获取两个像素的颜色值。

8、定义了一个阈值 threshold,用于判断两个像素是否相似。

9、如果两个像素的 RGB 值在阈值范围内相等,则返回*True*,表示两个像素相似;否则返回 False

10在主函数 img_cv 中,使用 Image.open 打开两个图像文件 'temp_img1.png''temp_img2.png',并将它们分别赋值给变量 img1_img2_

11、调用*get_gap* 函数,传入 img1_img2_ 作为参数,获取两个图像的相似度,并将不匹配的像素的 x 坐标赋值给变量 x_pos。

12、最后,使用 print 打印调用 img_cv 函数的返回值,即不匹配的像素的 x 坐标。

需要注意的是,这段代码假设两个图像的尺寸相同,并且以左上角为起点进行比较。如果需要比较不同尺寸的图像,或者从其他位置开始比较,需要进行相应的修改。

在运行代码之前我们看一下,大致的像素,大致是1063-1625=38

图片用到的测量工具是 Snipaste,之前有介绍过:点我

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

代码演示:

在这里插入图片描述

完整版代码

# -*- coding: utf-8 -*-
'''
@Time    :2023/8/2 15:06
@作者    :庄志权
@联系    :18721945973
'''
from PIL import Image


def get_gap(image1, image2):
    left = 0
    for i in range(left, image1.size[0]):
        for j in range(image1.size[1]):
            if not is_pixel_equal(image1, image2, i, j):
                left = i
                return left
    return left


def is_pixel_equal(image1, image2, x, y):
    pixel1 = image1.load()[x, y]
    pixel2 = image2.load()[x, y]
    threshold = 60
    if abs(pixel1[0] - pixel2[0]) < threshold and abs(pixel1[1] - pixel2[1]) < threshold and abs(
            pixel1[2] - pixel2[2]) < threshold:
        return True
    else:
        return False


def img_cv():
    img1_ = Image.open('temp_img1.png')
    img2_ = Image.open('temp_img2.png')
    x_pos = get_gap(img1_, img2_)
    return x_pos


print(img_cv())

我个人感觉这个代码还是很实用的,最初的代码是用在滑块验证码上的

希望对大家有帮助

致力于办公自动化的小小程序员一枚#

都看到这了,关注+点赞+收藏=不迷路!!

如果你想知道更多关于Python办公自动化的知识各位大佬给个关注吧!

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

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

相关文章

16 Springboot——登录功能实现

16.1 修改index.html中表单跳转的地址 将action的地址改为user/login&#xff0c;意思是点击提交按钮后&#xff0c;就会跳转到user/login地址&#xff0c;然后只要用Controller类的RequsetMapping去接这个地址就行了。 <body class"text-center"><form cl…

【已解决】vagrant up下载box速度太慢的解决方法

一、问题背景 本菜鸟在学习雷神(尚硅谷雷丰阳)的这个教程Java项目《谷粒商城》Java架构师 | 微服务 | 大型电商项目的时候&#xff0c;按照视频教程的步骤&#xff0c;正准备用Vagrant工具给VirtualBox安装并启动Centos7的Linux操作系统&#xff0c;当在Windows命令提示符窗体…

RL — 强化学习技巧

一、说明 深度学习&#xff08;DL&#xff09;很难训练&#xff0c;强化学习&#xff08;RL&#xff09;要差得多。在早期开发中&#xff0c;遵循与 DL 相同的策略&#xff1a;保持简单&#xff01;消除任何妨碍您的花里胡哨的东西&#xff0c;并将不确定性降至最低。具体到RL&…

QGIS下载谷歌地图或者其他地图

QGIS安装Welcome to the QGIS project! 打开QGIS 添加图源 Google_Maps: https://mt1.google.com/vt/lyrsr&x{x}&y{y}&z{z} Google_Terrain: https://mt1.google.com/vt/lyrst&x{x}&y{y}&z{z} Google_Roads:https://mt1.google.com/vt/lyrsh&x{x…

Spring Boot参数校验实现自定义响应类优雅处理

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Spring Boot参数校验实现自定义响应类优雅处理 ⏱️ 创作时间&#xf…

模拟考试系统与传统教育方法的对比分析

随着科技的不断进步&#xff0c;教育领域也在不断更新和发展。模拟考试系统作为一种新的教育方式&#xff0c;与传统的教育方法相比&#xff0c;在学习效果、学习方式和学习体验等方面具有诸多优势。 学习效果 模拟考试系统能够提供更全面、更真实的考试环境&#xff0c;从而…

使用mysql容器创建主从同步

1、主数据库设置 创建主数据库容器&#xff1a; docker run -d --restartalways --name mysql-master -p 3306:3306 -v /home/apps/mysql-master/conf:/etc/mysql/conf.d -v /home/apps/mysql-master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD123456 mysql:8.0.16 --lower…

【普通人维护windows的方法,不中毒,不弹窗,不卡顿】

前言 IT人也是普通人&#xff0c;我就说说普通人维护电脑的方法。 我的电脑配置 给大家看看&#xff0c;配置一般&#xff0c;运行软件和游戏&#xff0c;可以保持基本流程 日常维护措施 我不太喜欢设定一些非主流的配置&#xff0c;下了一个360卫士,360其他的套餐可以不用下…

【腾讯云 Cloud Studio 实战训练营】云上编程,彻底释放电脑物理内存

文章目录 前言一、快速上手1、账号注册2、新建工作空间3、配置工作空间参数4、工作空间展示5、运行飞机大战代码 二、空间模板三、应用推荐1、点击 Fork2、等待工作空间启动3、安装 Dependencies4、运行 App 总结 前言 腾讯云推出的 Cloud Studio 是基于浏览器的集成式开发环境…

Android 14重要更新预览

Android 14重要更新预览 国际化 Android 14 在 Android 13 的基础上进一步扩展了按应用设定语言功能&#xff0c;提供了一些额外的功能&#xff1a; 自动生成应用的 localeConfig&#xff1a;从 Android Studio Giraffe Canary 7 和 AGP 8.1.0-alpha07 开始&#xff0c;您可以…

vcruntime140_1.dll修复的方法大全,缺失vcruntime140_1.dll解决方法分享

vcruntime140_1.dll这个文件在电脑里属于挺重要的一个文件&#xff0c;一但它缺失了&#xff0c;那么很多程序都是运行不了的&#xff0c;今天我们就来讲解一下这个vcruntime140_1.dll修复以及它的一些作用和属性。 一.vcruntime140_1.dll的作用 vcruntime140_1.dll是Microso…

排序八卦炉之选择、堆排

文章目录 1.选择排序1.1代码实现1.2复杂度 2.堆排序2.1代码实现2.2复杂度 1.选择排序 1.1代码实现 // 当数据趋于有序或随机(可能部分有序) 插排更有优势 O(N)~O(N^2) //选择排序&#xff1a;O&#xff08;N^2&#xff09; O(N^2)~O(N^2) void …

HttpRunner自动化工具之times 重复执行

单个用例重复执行 如果想让某个测试步骤重复执行&#xff0c;可以在test 中增加times参数&#xff0c;如下: 执行效果&#xff1a; 实战案例 光学理论是没用的&#xff0c;要学会跟着一起敲&#xff0c;要动手实操&#xff0c;才能将自己的所学运用到实际当中去&#xff0c;这…

纯粹即刻,畅享音乐搜索的轻松体验

纯粹即刻&#xff0c;畅享音乐搜索的轻松体验 在当今快节奏的生活中&#xff0c;我们常常渴望一种简单而便捷的方式来探索和享受音乐。现在&#xff0c;你可以纯粹即刻地畅享音乐搜索的轻松体验。无论你是寻找热门歌曲还是探索不同风格的音乐&#xff0c;这款应用将为你带来随…

6.物联网操作系统信号量

一。信号量的概念与应用 信号量定义 FreeRTOS信号量介绍 FreeRTOS信号量工作原理 1.信号量的定义 多任务环境下使用&#xff0c;用来协调多个任务正确合理使用临界资源。 2.FreeRTOS信号量介绍 Semaphore包括Binary&#xff0c;Count&#xff0c;Mutex&#xff1b; Mutex包…

ATFX汇评:英央行利率决议来袭,大概率加息25基点

ATFX汇评&#xff1a;今日19:00&#xff0c;英国央行公布利率决议、会议纪要和货币政策报告&#xff1b;半小时后&#xff0c;英国央行行长贝利召开货币政策新闻发布会。当前英国央行基准利率5%&#xff0c;市场预期将加息25基点至5.25%&#xff0c;假若符合预期&#xff0c;则…

问道管理:沪指窄幅震荡跌0.18%,有色、汽车等板块走低

3日早盘&#xff0c;沪指盘中窄幅震动下探&#xff0c;创业板逆市上扬&#xff1b;两市半日成交不足5000亿元&#xff0c;北向资金净卖出超15亿元。 到午间收盘&#xff0c;沪指跌0.18%报3255.88点&#xff0c;深成指跌0.23%&#xff0c;创业板指涨0.2%&#xff1b;两市算计成交…

2023年一建考点速记(五大专业)

一级级建造师考点速记手册是根据历年考试的命题方向及命题规律总结而成&#xff0c;其中BI超频必考点(每年必考)&#xff0c;B2高频易考点(每2年一次)B3中频可考点(3-5年一次)&#xff0c;B4低频 BOSS 考点(超过5年一次B1涵盖卷面的40%的分值;B2涵盖卷面20%的分值;B3涵盖卷面15…

网工头疼的IP子网划分,其实就这么简单

下午好&#xff0c;我的网工朋友。 最近网工群里还是一如既往的热闹啊&#xff0c;关于行业、技术、职场的话题热议不断。 前段时间有群友在里面聊子网划分&#xff0c;有几个不懂的网工朋友&#xff0c;悄悄来私聊老杨总&#xff0c;表示想再补充一下这方面的知识。 看了眼&…

IDEA强大的VisualGC插件

前言 开发阶段实时监测&#xff0c;自己的JVM信息&#xff0c;实时可视化 Hotspot JVM 垃圾回收监控工具, 支持查看本地和远程JVM进程, 支持G1 and ZGC算法。 插件安装 在线安装 IntelliJ IDEA 可通过在线安装的方式&#xff0c;安装插件 JDK VisualGC&#xff0c;安装步骤: …