2013-10-12 125 views
0

我想比較python中的圖像,比如imageA.jpg和imageB.jpg。我做這種方式:通過讀取二進制數據比較Python中的圖像

f = open('./imageA.jpg','rb') 
imgA = f.read() 
f.close() 
f = open('./imageB.jpg','rb') 
imgB = f.read() 
f.close() 
imagesEqual = imgA == imgB 

最後一行主要檢查來自兩個圖像文件中讀取二進制數據的字符串相等。 現在,很多stackoverflow問題和谷歌搜索建議使用Python模塊,如ImageChops或OpenCV。我這樣做的方式不正確嗎?如果是這樣,爲什

謝謝!

+0

如果你想確切的文件相等,那很好。如果你想允許一些差異(比如'imageA'中的1個像素比'imageB'中的相同像素輕一點),那麼當然它是沒用的;-) –

+0

即使兩幅圖像完全相同,如果例如某個標題(jfif,exif)不同,它們將不相等。你不比較圖形,你是比較字節。 – Hyperboreus

+0

那麼2張圖片可以擁有相同的exif/jiff頭部數據嗎?如何比較只有圖像數據而不是文件頭部數據的字節? – eknight7

回答

0

與您的代碼。如果要比較圖像的實際內容(像素值),則應打開並加載兩個圖像(imgA = Image.open('./ imageA.jpg'),imgA.load())並比較它們,因爲有時兩個相同圖像的文件可能包含不同的標題,元數據......在這種情況下,圖像是相同的,但文件是不同的。