使用PIL查詢影像差異
在影像處理中,查詢兩幅影像之間的差異是各種應用中的一個關鍵步驟。理解兩幅影像之間的差異至關重要,這可以幫助我們檢測變化、識別物體以及其他相關應用。在本博文中,我們將探討如何使用Python影像庫(PIL)查詢兩幅影像之間的差異。
安裝和語法
要使用PIL,我們需要使用pip包管理器安裝它。我們可以在終端中執行以下命令來安裝PIL:
pip install pillow
要使用PIL查詢兩幅影像之間的差異,我們可以使用ImageChops模組。ImageChops模組提供了各種影像操作,包括查詢兩幅影像之間的差異。使用PIL查詢兩幅影像之間差異的語法如下:
from PIL import Image, ImageChops # find the difference diff = ImageChops.difference(img1, img2) # show the difference diff.show()
演算法
匯入所有必要的模組,例如用於影像比較的ImageChops模組和用於影像處理的PIL模組。
應該使用PIL模組提供的Image.open()函式開啟需要比較的兩幅影像。
要確定兩幅影像之間的差異,請使用ImageChops.difference()函式。此函式在接收兩個影像物件作為輸入後,返回一個新的影像物件,該物件表示兩個輸入影像之間逐畫素差異的絕對值。
最終影像將為灰度影像,白色畫素表示兩幅影像之間差異的區域,黑色畫素表示沒有差異。
使用Image模組提供的show()函式顯示差異影像。這將在新視窗中顯示差異影像。
Image模組的save()方法是一種可選方法,可用於將不同的影像儲存到檔案。此方法使用檔名和格式作為輸入將影像儲存到選定的檔案。
注意:請記住,要比較的兩幅影像的大小和解析度應該相同,否則,差異影像可能無法準確地表示兩幅影像之間的差異。
下載並將以下影像重新命名為beach.jpg和beach2.jpg


示例1
from PIL import Image, ImageChops
# open images
img1 = Image.open('image1.jpg')
img2 = Image.open('image2.jpg')
# find the difference
diff = ImageChops.difference(img1, img2)
# show the difference
diff.show()
此程式碼開啟兩幅影像,image1.jpg和image2.jpg,並使用ImageChops.difference()方法查詢它們之間的差異。然後,它使用show()方法顯示差異影像。

示例2
from PIL import Image, ImageChops
# open images
img1 = Image.open('beach.jpg')
img2 = Image.open('beach2.jpg')
# resize images
img1 = img1.resize((400, 400))
img2 = img2.resize((400, 400))
# find the difference
diff = ImageChops.difference(img1, img2)
# threshold the difference image
threshold = 50
diff = diff.point(lambda x: 0 if x < threshold else 255)
# show the difference
diff.show()
此程式碼開啟兩幅影像,image1.png和image2.png,並將它們的大小調整為400x400。然後,它使用ImageChops.difference()方法查詢兩幅影像之間的差異。然後,使用point()方法將差異影像的閾值設定為50。最後,使用show()方法顯示差異影像。

應用
透過檢視影像之間的差異,可以找到觀測電影或照片中的變化。
它還可以用於在影像處理應用程式中發現和突出顯示視覺變化,例如用於醫學成像以定位腫瘤或其他異常情況。
在法醫調查中,比較監控錄影可以幫助揭露嫌疑人或發現新的證據,這種方法特別有用。
此外,它往往被用於現代應用程式中來篩選硬體並查明任何變化或故障。
結論
在本教程中,我們學習瞭如何使用Python的Python影像庫(PIL)來確定兩幅影像之間的差異。第一步是安裝PIL並匯入所需的模組。然後,討論了兩種確定兩幅影像之間差異的方法——第一種方法是使用ImageChops.difference()函式,這是一種快速簡便的方法來確定兩幅影像之間的差異;第二種方法包括使用NumPy從兩幅影像中減去畫素值,以建立突出顯示差異的新影像。最後,我們討論了影像差異檢測的一些潛在用途。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP