前言
前几天看到一篇文章写Python+selenium+超级鹰对滑块验证码的操作,大致的思想如下: 1、就是将滑块验证码进行截图 2、利用超级鹰的API进行对图片的处理, 3、返回滑块的距离
我在很久之前也遇到过类似的需求, 当时我的好友帮我写了一个代码,是利用PIL对两张图片进行像素点分析,从而返回两张图片x轴的像素点
举个列子,如下,我有两张图片:
这两张图片是一模一样的,第二张我故意划了一条数显,现在我需要知道,第一张与第二张对比,从而得知x轴的长度
好,废话不多说开始代码部分
库 安装 Pillow pip install Pillow
具体实现如下来自(文心一言注释): 这段代码的功能是计算两个图像的相似度,并返回第一个不匹配的像素的 x 坐标。 1、导入 Image
模块,该模块是 PIL (Python Imaging Library)
的一部分,用于处理图像。 2、定义了一个名为 get_gap
的函数,它接受两个图像对象 image1
和 image2
作为参数,用于计算两个图像的相似度。 3、在 *get_gap
*函数中,定义了一个变量 left
并初始化为 0,用于记录不匹配的像素的 x 坐标。 4、使用两层循环遍历 image1
的每个像素,并比较与 image2
相应位置的像素是否相等。 5、如果发现两个像素不相等,即调用 is_pixel_equal
函数判断两个像素是否相似。 6、is_pixel_equal
函数接受两个图像对象 image1
和 image2
,以及要比较的像素坐标 (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,之前有介绍过:点我
代码演示:
完整版代码
'''
@Time :2023/8/2 15:06
@作者 :庄志权
@联系 :18721945973
'''
from PIL import Imagedef 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 = ireturn leftreturn leftdef 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_posprint ( img_cv( ) )
我个人感觉这个代码还是很实用的,最初的代码是用在滑块验证码上的
希望对大家有帮助
致力于办公自动化的小小程序员一枚#
都看到这了,关注+点赞+收藏=不迷路!!
如果你想知道更多关于Python办公自动化的知识各位大佬给个关注吧!