python+PIL实现图片对比(一)

前提

前阵子报了个班,学了一些android UI自动化相关的东西,于是想到第一家单位在做android手机自动化的时候,有用到图片对比,来确定是否点到指定的页面,遂想在appium+python做UI自动化时,也能够图片对比来判定是否到了指定页面,也算是另一种断言方式。
说干就干,上网一搜果然有一个第三方库可以处理图片 传送门 ,这篇文章算是一个学习小结,先了解一些基本的语法,后面准备用到android UI自动化中

简单介绍

首先安装同其他第三方库,直接 pip install pillow ,from PIL import Image 如果没有报错则说明安装成功
Pillow中最重要的类就是Image,可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到新图片,直接创建一个图片。
我这边仅仅是用到了直接打开图片,然后进行对比,所以其他不多做介绍
使用Image模块中的open函数打开一张图片:
image1= Image.open(pic1)
对比图片的时候用到了一个像素,img1.histogram() ,这个函数会返回一个列表,里面是每个坐标像素点的RGB值,对比图片不同的思路,就是对比两张图片RGB值
这边的对比思路参考了 monkey 的一篇文章 图片对比 ,致谢!!!
具体代码如下:

#coding=utf-8
#author='Shichao-Dong'

from PIL import Image
import math
import operator

def compare(pic1,pic2):
    '''
    :param pic1: 图片1路径
    :param pic2: 图片2路径
    :return: 返回对比的结果
    '''
    image1 = Image.open(pic1)
    image2 = Image.open(pic2)

    histogram1 = image1.histogram()
    histogram2 = image2.histogram()

    differ = math.sqrt(reduce(operator.add, list(map(lambda a,b: (a-b)**2,histogram1, histogram2)))/len(histogram1))

    print differ
    return differ

compare(r'D:\Ptest\Testcase\11.jpg',r'D:\Ptest\Testcase\22.jpg')

这个differ我这边就根据我的理解,简单解释一下计算过程吧
首先histogram得到的结果是一个列表[ ]

list(map(lambda a,b: (a-b)**2,histogram1, histogram2))

这个表达式获得结果是 一个 histogram1[i] - histogram2[i] 相减的结果平方的新的列表
即:h3=[(h1[1]-h2[1])2,..........(h1[n]-h2[n])2](2是平方的意思,不知道怎么表达所以就这样写吧)

reduce(operator.add, list(map(lambda a,b: (a-b)**2,histogram1, histogram2)))/len(histogram1)

这个函数返回的就是 a=(h3[1]+h3[2]+......+h3[n])/n
math.sqrt(a)这个就很容易理解啦,就是把a开2次方

最后得到differ,如果两张图 一模一样那么最终结果differ应该是0,即differ越小,图片越相似(甚至相同),differ越大,图片差异越大

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,977评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,198评论 4 61
  • 开了一上午的会,无聊的犯困。 中午, 欢子想去距离2公里外的地方吃炸鸡,不明白,欢子总是对鸡这种动物情有独钟~ 我...
    瑶女天姿阅读 448评论 0 1
  • 连续314 【耶3:1】“有话说,人若休妻,妻离他而去,作了别人的妻,前夫岂能再收回她来?若收回她来,那地岂不是大...
    报佳音阅读 845评论 0 0
  • 第13天·21天OH卡美颜瘦身课 #玩卡不卡·每日一抽# 每一位都可以通过这张卡片觉察自己: 1、直觉他叫什么名字...
    田__田阅读 219评论 0 0