題:
命令行工具,以圖形方式檢查兩個圖像是否完全相同
sashoalm
2014-07-13 17:08:07 UTC
view on stackexchange narkive permalink

我需要一個命令行工具來比較2張圖像,並說它們的內容是否相同,而不管編碼是什麼,即,一個可能是* .bmp,另一個可能是* .png,只要所有寬度,高度和所有對應的像素都相同。

  • 需要精確的圖形相同性
  • 壓縮損失即使幾乎看不見,也會產生不同的圖像
  • 相同的透明度也很重要
  • EXIF / etc不相關
只是為了澄清一下,元數據(例如[EXIF](http://en.wikipedia.org/wiki/Exchangeable_image_file_format))不相關,對嗎?
@CristianCiupitu是的,只是圖像在任何背景上都顯示相同(即alpha透明度是不同的)。
七 答案:
#1
+15
Volker Siegel
2014-07-13 22:13:41 UTC
view on stackexchange narkive permalink

使用 ImageMagick apt-get install imagemagick ),您可以像這樣比較不依賴於編碼和元數據的圖像:

 識別-安靜-格式的“%#”圖像...  

請注意,已使用有損壓縮編碼的圖像,例如 JPEG (* .jpg)具有細微的,通常是不可見的更改。

另請參見 ImageMagick示例:圖像簽名

嚴格來說,您還需要比較顏色模型和像素值的縮放比例。它們可能不是圖像中元數據的一部分。

好答案。只是為了澄清一下:這將為`images`中的每個圖像打印連接的校驗和。然後,您需要檢查這些校驗和是否相同。
#2
+6
Franck Dernoncourt
2014-07-13 20:50:18 UTC
view on stackexchange narkive permalink

如果您具有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,那麼在任何情況下都應該易於移植

相關:如何確定我是否要下載/保存重複圖像?

相關的高級語言。 >

在有損壓縮的情況下,像> 0.95這樣的東西難道不比== 1更好地補償壓縮偽影嗎?
@vsz我還沒有嘗試過,但這聽起來很合理。
@vsz實際上,問問者希望在圖形上完全相同,因此“ == 1”是正確的。
#3
+3
nodiscc
2014-07-13 19:20:13 UTC
view on stackexchange narkive permalink

findimagedupes-查找視覺上相似或重複的圖像

findimagedupes是一種命令行實用程序,對兩個圖像執行粗略的“視覺差異”。這使您可以比較兩個圖像或整個圖像樹,並確定是否相似或相同。在常見的圖像類型上,findimagedupes似乎準確度約為98%。

不幸的是,它不適用於我的情況,因為它報告的視覺相似(但不相同)圖像為重複圖像。我需要它來驗證自動化測試的結果,因此需要完全相同,而不僅僅是相似性。
#4
+3
sashoalm
2014-07-14 13:57:38 UTC
view on stackexchange narkive permalink

我最終創建了一個名為imgdiff的小型Qt程序,該程序使用2個文件名並執行逐像素比較。如果它們不同,它將打印出一條錯誤消息,並以1退出;如果它們相同,則以0靜默退出。

用法示例為:

  imgdiff img1 .png img2.bmp  

鏈接到Google Code項目- https://code.google.com/p/imgdiff/

#5
+1
mike
2020-07-06 23:11:49 UTC
view on stackexchange narkive permalink

從此處嘗試dupeguru: https://dupeguru.voltaicideas.net/。在圖片模式下,它會檢查相似的圖像,即使它們的大小不同,它也會設置閾值,創建組在類似文件中,選擇最大的文件作為主文件,但也可以設置另一個文件作為參考。能夠將文件移動到某個路徑或回收站或將其完全刪除。它是跨平台的。

另一個可用於各種合併操作的有趣工具是WinMerge: https://winmerge.org/。它具有一個有趣的功能,可以突出顯示圖像中的差異區域,但是可以一次比較多達三個文件,或者包含文件的三個路徑,但是,如果在這些路徑上找到具有相同名稱的文件,則可以進行比較。這對文件夾同步很有用。這僅是Windows,可以在Wine中正常運行,但是有一個QT版本似乎處於早期階段: https://github.com/OzzieIsaacs/winmerge-qt

您可以添加有關該軟件相關功能的詳細信息嗎?
#6
  0
Mathias Bynens
2017-04-27 17:12:19 UTC
view on stackexchange narkive permalink

假設您有一個名為 before 的文件夾,其中包含原始圖像,以及一個名為 after 的文件夾,其中應包含具有相同文件名的外觀相同的圖像。使用 ImageMagick的比較,您可以執行以下操作:

 ,用於before / *。png中的文件;執行result = $(比較-metric AE“ $ {file}”“ $ {file / before / after}” / tmp / diff.png 2>&1);如果[“ $ {result}”!='0'];然後回顯“ $ {file}中的$ {result}個錯誤像素”; fi;完成;  
#7
  0
jhnc
2019-02-03 04:55:43 UTC
view on stackexchange narkive permalink

可能需要進行調整以適當地處理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 \} //' 


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...