在自动化测试时,经常需要截图和标准图片对比,以此判断测试是否成功,那么用什么来判断测试图片与标准图片是相似的呢?这里需要使用
一、SSIM
结构相似性指数(Structural Similarity Index,SSIM index)是一种用以衡量两张数位影像相似程度的指标。当两张影像其中一张为无失真影像,另一张为失真后的影像,二者的结构相似性可以看成是失真影像的影像品质衡量指标。相较于传统所使用的影像品质衡量指标,像是峰值信噪比,由于
Wikipedia-结构相似性
图像质量评价之结构相似性SSIM(上)
二、代码实现
我的所有测试脚本都是基于
在项目
全部代码位于这里,请自取 Image.Similarity
三、测试效果
测试的五张图片说明(图片的长宽都相同)
测试结果
所以经过测试我们可以得出以下结论
- SSIM值大于或等于0.999999时,可以认为两张图片"完全一致"。事实上在测试的时候,由于网络波动或者CPU性能原因,图片有时内容完全一致但Size有细微差别,比如标准图片为1478KB,而测试结果图片为1462KB,这个时候我们应该认为这两张图片是一样的,而经过测试显然SSIM指标完全符合这个要求
- SSIM值小于0.999999时,可以认为两张图片不一致。显然,无论是几个像素的修改还是大范围修改,甚至是不同的图片,SSIM指标都能检测出来,也符合我们的要求