其他分享
首页 > 其他分享> > 利用imagehash库比较图片是否一致

利用imagehash库比较图片是否一致

作者:互联网

1.背景
编写观看视频相关case时,需要校验已观看的资源是否显示在“最近观看”列表,且资源封面显示的正确;
此时就要校验资源在视频列表的封面、与在“最近列表”的封面是否相同;
就是比较两个小图片是否相同。

2.解决思路
先截取到指定位置的封面图片,然后获取图片哈希值,比较两图片对应的哈希值来判断图片的相似性。

3.解决方法
3.1 截取指定位置图片

  1. uiautomator2+python
    uiautomator2工具地址:https://github.com/openatx/uiautomator2
    uiautomator2工具有已封装好的方法,可以直接对指定元素截图
import uiautomator2 as u2
d = u2.connect('xxx')  # 设备serial
im = d(resourceId='').screenshot()  # 对指定属性的元素截图
im.save('test.png')  # 保存图片即可
  1. appium+python
    appium中没有可以直接截取元素的方法,可以借助python中Image库截取图片;
    流程大概是:先截取当前页面、然后通过元素坐标(bounds值)剪裁到相关元素截图、保存截图
from PIL import Image

self.driver.save_screenshot('test.png') # 截取当前页面,创建appium driver对象的方法就不细写了
img = Image.open('test.png')
im = img.crop((858,265,1506,610))  # 传入要截取元素的坐标,可以通过get_attribute('bounds')方式获得,也不细写了
im.save('test_ele.png')  # 保存即可

3.2比较两图片哈希值
利用上面任意方法分别截取到对应位置的封面截图,接下来就可以对两图片进行比较了;

import imagehash

# 分别计算两图片hash值
hash1 = imagehash.average_hash(Image.open('/home/xxx/test.png'))  
hash2 = imagehash.average_hash(Image.open('/home/xxx/test2.png'))
# 比较哈希值
dif = hash1 - hash2  
# 设定最大不同值(我这里是肉眼看两封面确实相同时,然后跑了几次case,发现10以内基本确保图片是一定一致的
# 可以拿真实的case跑几次试一下,然后确定一个最大不同值
max_dif = 10 
if dif < 0:
    dif = -dif
# dif与最大值比较一下就可以了,返回结果可以随意设定
if dif <= max_dif:
    return True
else:
    return False

标签:Image,imagehash,dif,一致,test,截取,png,图片
来源: https://blog.csdn.net/lujiaxing12/article/details/115668225