python+PIL實現(xiàn)圖片對比(一)

前提

前陣子報了個班,學(xué)了一些android UI自動化相關(guān)的東西,于是想到第一家單位在做android手機自動化的時候,有用到圖片對比,來確定是否點到指定的頁面,遂想在appium+python做UI自動化時,也能夠圖片對比來判定是否到了指定頁面,也算是另一種斷言方式。
說干就干,上網(wǎng)一搜果然有一個第三方庫可以處理圖片 傳送門 ,這篇文章算是一個學(xué)習(xí)小結(jié),先了解一些基本的語法,后面準備用到android UI自動化中

簡單介紹

首先安裝同其他第三方庫,直接 pip install pillow ,from PIL import Image 如果沒有報錯則說明安裝成功
Pillow中最重要的類就是Image,可以通過以下幾種方式實例化:從文件中讀取圖片,處理其他圖片得到新圖片,直接創(chuàng)建一個圖片。
我這邊僅僅是用到了直接打開圖片,然后進行對比,所以其他不多做介紹
使用Image模塊中的open函數(shù)打開一張圖片:
image1= Image.open(pic1)
對比圖片的時候用到了一個像素,img1.histogram() ,這個函數(shù)會返回一個列表,里面是每個坐標像素點的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: 返回對比的結(jié)果
    '''
    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我這邊就根據(jù)我的理解,簡單解釋一下計算過程吧
首先histogram得到的結(jié)果是一個列表[ ]

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

這個表達式獲得結(jié)果是 一個 histogram1[i] - histogram2[i] 相減的結(jié)果平方的新的列表
即: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)

這個函數(shù)返回的就是 a=(h3[1]+h3[2]+......+h3[n])/n
math.sqrt(a)這個就很容易理解啦,就是把a開2次方

最后得到differ,如果兩張圖 一模一樣那么最終結(jié)果differ應(yīng)該是0,即differ越小,圖片越相似(甚至相同),differ越大,圖片差異越大

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,033評論 4 61
  • 開了一上午的會,無聊的犯困。 中午, 歡子想去距離2公里外的地方吃炸雞,不明白,歡子總是對雞這種動物情有獨鐘~ 我...
    瑤女天姿閱讀 485評論 0 1
  • 第13天·21天OH卡美顏瘦身課 #玩卡不卡·每日一抽# 每一位都可以通過這張卡片覺察自己: 1、直覺他叫什么名字...
    田__田閱讀 251評論 0 0
  • 像熱戀的離別,難捨難分,感受如同煎熬的等待,這是愛?!……
    帶風(fēng)走路deFENG閱讀 234評論 0 1

友情鏈接更多精彩內(nèi)容