python圖像對比_用python實現對比兩張圖片的不同

from PIL import Image

from PIL import ImageChops

def compare_images(path_one, path_two, diff_save_location):

"""

比較圖片,如果有不同則生成展示不同的圖片

@參數一: path_one: 第一張圖片的路徑

@參數二: path_two: 第二張圖片的路徑

@參數三: diff_save_location: 不同圖的保存路徑

"""

image_one = Image.open(path_one)

image_two = Image.open(path_two)

try:

diff = ImageChops.difference(image_one, image_two)

if diff.getbbox() is None:

# 圖片間沒有任何不同則直接退出

print("【+】We are the same!")

else:

diff.save(diff_save_location)

except ValueError as e:

text = ("表示圖片大小和box對應的寬度不一致,參考API說明:Pastes another image into this image."

"The box argument is either a 2-tuple giving the upper left corner, a 4-tuple defining the left, upper, "

"right, and lower pixel coordinate, or None (same as (0, 0)). If a 4-tuple is given, the size of the pasted "

"image must match the size of the region.使用2緯的box避免上述問題")

print("【{0}】{1}".format(e,text))

if __name__ == '__main__':

compare_images('1.png',

'2.png',

'我們不一樣.png')

執行結果:

2018020511084420.jpg

2018020511084421.jpg

2018020511084422.jpg

2018020511084423.jpg

第二種方法:

from PIL import Image

import math

import operator

from functools import reduce

def image_contrast(img1, img2):

image1 = Image.open(img1)

image2 = Image.open(img2)

h1 = image1.histogram()

h2 = image2.histogram()

result = math.sqrt(reduce(operator.add, list(map(lambda a,b: (a-b)**2, h1, h2)))/len(h1) )

return result

if __name__ == '__main__':

img1 = "./1.png" # 指定圖片路徑

img2 = "./2.png"

result = image_contrast(img1,img2)

print(result)

如果兩張圖片完全相等,則返回結果為浮點類型“0.0”,如果不相同則返回結果值越大。

同樣用上面兩張圖片,執行結果為38,還是比較小的:

2018020511084424.jpg

這樣就可以在自動化測試用例中調用該方法來斷言執行結果。

關于Pillow庫的詳細文檔:

總結

以上所述是小編給大家介紹的用python實現對比兩張圖片的不同,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397036.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397036.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397036.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kafka 分布式環境搭建

這篇文章將介紹如何搭建kafka環境,我們會從單機版開始,然后逐漸往分布式擴展。單機版的搭建官網上就有,比較容易實現,這里我就簡單介紹下即可,而分布式的搭建官網卻沒有描述,我們最終的目的還是用分布式來解…

Docker Machine搭建并加入節點

對于集群服務器來講,要在每臺機器上手動安裝Docker是一件及其痛苦的事情,還好有Docker Machine這一工具,Docker三劍客中的一角. 一、Docker Machine介紹 這個工具已經出了比較久了,Docker Machine官方介紹:https://doc…

ASPNET5的依賴注入

ASP.NET5設計的時候就是以DI為基礎的,它可以利用內建的框架在Startup類的方法中,把依賴注入進去。應用服務也可以被配置的注入。默認的服務容器提供一些基本的功能,它并不打算代替現代主流的DI框架。 1. 什么是Dependency Injection? DI的概…

java 權限控制 demo_Java-訪問控制權限

Java面向對象-訪問控制權限Java中,可以通過一些Java關鍵字,來設置訪問控制權限;主要有 private(私有), package(包訪問權限),protected(子類訪問權限),public(公共訪問權限)privatepackageprotectedpublic同…

《未來世界的幸存者》筆記

https://ruanyf.github.io/survivor/ 這兩天一直在上下班途中,讀阮一峰的這本書 《未來世界的幸存者》。還是有不少感慨的。做一下記錄。 未來人類社會的形態,將發生顛覆性的變化。舊的社會結構已經在崩潰了,但社會底層的機會變得更少了&…

python類中沒有屬性_如何在python語言中在類中刪除屬性和添加屬性

在python語言中的類,可以使用class定義類,調用__init__方法進行初始化;默認傳入self,可以在后面在添加幾個屬性。可以使用setattr()添加屬性,也可以使用delattr()刪除屬性。下面利用幾個實例說明這兩個方法的用法&…

mysql 數據復制停止工作_linux – Mysql GTID復制停止工作

我在主服務器和從服務器之間設置了mysql gtid復制.有趣的是,我發現復制在幾分鐘后停止工作,我必須使用stop slave并啟動slave來重啟mysql復制.誰能告訴我是什么原因導致這個問題?改變奴隸主:mysql> change master to-> master_host master.com,-&…

python學生管理系統gui版好例子網_python圖書管理系統gui 相關實例(示例源碼)下載 - 好例子網...

開發語言:Python | 大小:19.05M | 發布時間:2019-05-27 | 發布人:李易峰 相關標簽: 立即下載 開發語言:Python | 大小:0.21M | 發布時間:2020-08-23 | 發布人:聶嘉輝 相關…

COM組件的運行機制

COM組件的運行機制  構造一個創建COM組件的最小框架結構    IUnknown *pUnkNULL;    IObject *pObjectNULL;    CoInitialize(NULL);    CoCreateInstance(CLSID_Object, CLSCTX_INPROC_SERVER, NULL, IID_IUnknown, (void**)&pUnk);    pUnk->Qu…

申請去國外讀博士

必須要做的事情是: 考過GRE和TOEFL 準備推薦信 個人CV 聯系導師一般就是發郵件 轉載于:https://www.cnblogs.com/zhulinmails/p/5078695.html

動態編譯

下面的demo就涵蓋了動態編譯和運行類的過程 package 動態編譯; import java.lang.reflect.Method;import java.net.URL;import java.net.URLClassLoader; import javax.tools.JavaCompiler;import javax.tools.ToolProvider; public class Demo { public static void main(Stri…

python怎么打開spyder_Python開發環境Spyder安裝方法

Spyder(Scientific PYthon Development EnviRonment)是一個強大的交互式 Python 語言開發環境,提供高級的代碼編輯、交互測試、調試等特性,支持包括 Windows、Linux 和 OS X 系統。 本文在只安裝過python2.7的Win7環境下進行安裝Spyder,其他環…

矩陣、向量求導法則

復雜矩陣問題求導方法:可以從小到大,從scalar到vector再到matrix。 x is a column vector, A is a matrix practice: 轉載于:https://www.cnblogs.com/vincentQin/p/5406010.html

java字符函數_java字符串函數用法匯總

替換字符串中的字符例如有如下x的字符串String x "[kllkklk\kk\kllkk]";要將里面的“kk”替換為,可以使用兩種方法得到相同的結果replace(CharSequence target, CharSequence replacement) —— x.replace("kk", "")replaceAll(Stri…

[Vue]Scoped Css與Css Modules的區別

均為解決CSS全局作用域問題&#xff08;樣式沖突&#xff08;污染&#xff09;&#xff09;的一個解決方案。 1.Scoped CSS 當 <style> 標簽有 scoped 屬性時&#xff0c;相當于在元素中添加了一個唯一屬性用來區分。 <style scoped> .example {color: red; } <…

mysql數據庫-mysql數據定義語言DDL (Data Definition Language)歸類(六)

0x01 創建數據庫并指定字符集和排序規則 -- 三種實例寫法 create database temptab2 character set utf8 collate utf8_general_ci; create database temptab3 charset utf8 collate utf8_general_ci; create database temptab4 character setutf8 collate utf8_general_ci; 查…

vue antd admin怎么切換到basic分支_vue菜鳥從業記:前端如何與后端哥們進行接口聯調...

最近我的朋友王小閏進入一家新的公司&#xff0c;正好公司項目采用的是前后端分離架構&#xff0c;技術棧是王小閏非常熟悉的vue全家桶&#xff0c;后端用的是Java語言。在前后端開發人員碰面之后&#xff0c;協商確定好了前端需要的數據接口(扯那么多&#xff0c;其實也就是關…

ASP.NET AntiXSS的作用

XSS跨站腳本攻擊是指用戶輸入HTML編碼對網站進行跨站攻擊。通過使用FCKeditor、FreeTextBox、Rich TextBox、Cute Editor、TinyMCE等等Html編輯器&#xff0c;用戶可以輸入一些危險字符&#xff0c;注入到網站中&#xff0c;形式XSS。&#xff08;一般的解決辦法是使用BBCode的…

p1358

這是一道二維樹狀數組模板題。 需要注意的可能只有這些xy有可能為零。那每次輸入之后全部&#xff0c;相當于全部向右下角移了一位。 那就直接給代碼了呦。 using namespace std; int c[1050][1050],n,m; int i,f; int a1,b1,a2,b2,tx,ty,tk; int ans; int lowbit(int x) {retu…

java中對象的生存期_深入理解Java虛擬機-判斷對象是否存活算法與對象引用

我們知道Java中的對象一般存放在堆中&#xff0c;但是總不能讓這些對象一直占著內存空間&#xff0c;這些對象最終都會被回收并釋放內存&#xff0c;那么我們如何判斷對象已經成為垃圾呢&#xff1f;這篇文章會提出兩種算法解決這個問題。另外&#xff0c;本文還要談一談對象引…