引入的包
from PIL import Image,ImageFile#第三方库,PIL
import imagehash#自带的
全局变量
imageName=["AcceptRefresh","ActingCommander","StartGame","RoundEnd","RefuseRefresh"]
max_dif=10
imageName是事先保存的需要进行对比的子区域截图的名字。
max_dif是两张图片在相差值多少范围内算一致。
获取本地的图片
def getImageFile(index):
global imageName
imagePath="images/"+imageName[index]+".png"
#print(imagePath+"图片位置")
image=Image.open(imagePath)
return image
事先在脚本执行的目录下创建了一个images目录,并将需要比对的子区域图片保存在了这个目录,如下图。子区域图片截图通过截屏模块截取。其实这里是可以优化一下,只截取固定一个区域在不同阶段的图片,这样会提升性能,就是通过截取的图片没有那么一目了然的看出当前处于哪个游戏阶段。
图像对比
#根据截屏截取的图片和本地的图片hash对比判定两张图片是否一致
def compare_image_with_hash(image_file1,image_file2,max_dif=0):
"""
max_dif: 允许最大hash差值, 越小越精确,最小为0
"""
ImageFile.LOAD_TRUNCATED_IMAGES = True
hash_1 = None
hash_2 = None
hash_1 = imagehash.average_hash(image_file1)
#print(hash_1)
hash_2 = imagehash.average_hash(image_file2)
#print(hash_2)
dif = hash_1 - hash_2
print("差值 %d"%(dif))
if dif < 0:
dif = -dif
if dif <= max_dif:
return True
else:
return False
def CompareImage(image,index):
isEqual=compare_image_with_hash(image,getImageFile(index),max_dif)
return isEqual
根据图片的hash值差异确定两张图片是否一致。以上,祝好!