我需要一個命令行工具來比較2張圖像,並說它們的內容是否相同,而不管編碼是什麼,即,一個可能是* .bmp,另一個可能是* .png,只要所有寬度,高度和所有對應的像素都相同。
- 需要精確的圖形相同性
- 壓縮損失即使幾乎看不見,也會產生不同的圖像
- 相同的透明度也很重要
- EXIF / etc不相關
我需要一個命令行工具來比較2張圖像,並說它們的內容是否相同,而不管編碼是什麼,即,一個可能是* .bmp,另一個可能是* .png,只要所有寬度,高度和所有對應的像素都相同。
使用 ImageMagick ( apt-get install imagemagick
),您可以像這樣比較不依賴於編碼和元數據的圖像:
識別-安靜-格式的“%#”圖像...
請注意,已使用有損壓縮編碼的圖像,例如 JPEG (* .jpg)具有細微的,通常是不可見的更改。
另請參見 ImageMagick示例:圖像簽名。
嚴格來說,您還需要比較顏色模型和像素值的縮放比例。它們可能不是圖像中元數據的一部分。
如果您具有MATLAB,則可以使用:
%將圖像作為數組讀取到變量'a'&'b'。一個= imread('MIMICDatacollection.bmp'); b = imread('MIMICDatacollection.png'); %將多維數組展平為1Dc = a(:); d = b(:);%執行比較if length(c)〜= length(d)disp('圖像的大小不相同')否則e = corr2(光盤);如果e == 1 disp('圖像相同')否則,disp('圖像不相同')結束;結束
我個人將其與PNG和BMP一起使用,但是它應該適用於 imread
支持的任何格式。
如果需要要在沒有Matlab的計算機上運行它,您可以將其轉換為函數並進行編譯以使其成為CLI。
如果您沒有Matlab,那麼在任何情況下都應該易於移植
相關的高級語言。 >
findimagedupes-查找視覺上相似或重複的圖像
findimagedupes是一種命令行實用程序,對兩個圖像執行粗略的“視覺差異”。這使您可以比較兩個圖像或整個圖像樹,並確定是否相似或相同。在常見的圖像類型上,findimagedupes似乎準確度約為98%。
我最終創建了一個名為imgdiff的小型Qt程序,該程序使用2個文件名並執行逐像素比較。如果它們不同,它將打印出一條錯誤消息,並以1退出;如果它們相同,則以0靜默退出。
用法示例為:
imgdiff img1 .png img2.bmp
鏈接到Google Code項目- https://code.google.com/p/imgdiff/。
從此處嘗試dupeguru: https://dupeguru.voltaicideas.net/。在圖片模式下,它會檢查相似的圖像,即使它們的大小不同,它也會設置閾值,創建組在類似文件中,選擇最大的文件作為主文件,但也可以設置另一個文件作為參考。能夠將文件移動到某個路徑或回收站或將其完全刪除。它是跨平台的。
另一個可用於各種合併操作的有趣工具是WinMerge: https://winmerge.org/。它具有一個有趣的功能,可以突出顯示圖像中的差異區域,但是可以一次比較多達三個文件,或者包含文件的三個路徑,但是,如果在這些路徑上找到具有相同名稱的文件,則可以進行比較。這對文件夾同步很有用。這僅是Windows,可以在Wine中正常運行,但是有一個QT版本似乎處於早期階段: https://github.com/OzzieIsaacs/winmerge-qt。
假設您有一個名為 before
的文件夾,其中包含原始圖像,以及一個名為 after
的文件夾,其中應包含具有相同文件名的外觀相同的圖像。使用 ImageMagick的比較
,您可以執行以下操作:
,用於before / *。png中的文件;執行result = $(比較-metric AE“ $ {file}”“ $ {file / before / after}” / tmp / diff.png 2>&1);如果[“ $ {result}”!='0'];然後回顯“ $ {file}中的$ {result}個錯誤像素”; fi;完成;
可能需要進行調整以適當地處理Alpha通道,但轉換為ppm併校驗和似乎可行:
#!/ bin / bashfind“ $ {@:-。}” -type f-在IFS =讀取-r文件時打印| \ do hash = $(convert 2>&-“ $ {file}” -strip ppm:-| md5sum)#如果轉換失敗並沒有輸出,則會得到此哈希[“ $ hash” ='d41d8cd98f00b204e9800998ecf8427e-'] \ ||回顯“ $ hash $ {file}” | | sort | uniq -w32 --all-repeated =單獨| sed's / ^。\ {36 \} //'