6

Sto lavorando a un progetto in cui a un certo punto ho bisogno di confrontare due immagini. Chiunque può aiutarmi con un metodo per farlo ... Con il modo in cui le immagini sono schermate di un Software. ho voluto verificare se le due immagini sono identiche compresi i numeri e le lettere mostrate nell'immagine (screenshot del software) ..codice python per confrontare le immagini in python

+0

Cosa intendi quando parli? Vuoi vedere se sono identici? Stai cercando dettagli su come farlo in Python o su come confrontare le immagini in generale? –

+0

si ho voluto confrontare per vedere se sono identici inclusi i numeri/lettere visualizzati nel software – stallion

risposta

6

Ci sono i seguenti modi per fare il confronto corretto.

  • Il primo è il root-mean-Square Difference #

Per avere una misura di quanto simile due immagini sono, è possibile calcolare la radice-quadratico medio (RMS) Valore del differenza tra le immagini. Se le immagini sono esattamente identiche, questo valore è zero. La seguente funzione utilizza la funzione di differenza e quindi calcola il valore RMS dall'istogramma dell'immagine risultante.

# Example: File: imagediff.py 

import ImageChops 
import math, operator 

def rmsdiff(im1, im2): 
    "Calculate the root-mean-square difference between two images" 

    h = ImageChops.difference(im1, im2).histogram() 

    # calculate rms 
    return math.sqrt(reduce(operator.add, 
     map(lambda h, i: h*(i**2), h, range(256)) 
    )/(float(im1.size[0]) * im1.size[1])) 
  • Un altro è confronto esatto #

Il modo più rapido per determinare se due immagini hanno esattamente lo stesso contenuto è quello di ottenere la differenza tra le due immagini, e quindi calcolare la delimitazione riquadro delle regioni diverse da zero in questa immagine. Se le immagini sono identiche, tutti i pixel dell'immagine differenza sono zero e la funzione del riquadro di delimitazione restituisce Nessuno.

import ImageChops 

def equal(im1, im2): 
    return ImageChops.difference(im1, im2).getbbox() is None 
1

non posso dare una risposta pronta per l'uso, ma io vi punto nella (I pensa) la giusta direzione. Un modo semplice per confrontare due immagini consiste nel fare un hash delle loro rappresentazioni binarie e quindi vedere se quegli hash sono uguali. Un problema con questo è con la funzione di hash che si desidera utilizzare e si deve cercare uno che ha basse probabilità di collisioni, e l'altro è che un file di immagine probabilmente ha i metadati allegati alle informazioni binarie originali, quindi dovrete guardare su come tagliare i metadati per confrontare le immagini usando solo le loro informazioni binarie. Inoltre, non lo so per certo ma probabilmente la rappresentazione binaria di un'immagine codificata in jpg è diversa da un'immagine codificata in png, quindi dovresti esserne consapevole.

6

sto mantenendo una libreria Python chiamato pyssim che utilizza il metodo Structured Similarity (SSIM) per confrontare due immagini.

Non ha collegamenti Python, ma il programma perceptualdiff è anche fantastico nel confronto di due immagini - e abbastanza veloce.

+0

è il pyssim una sorta di paragone fuzzy? e se ci fosse una scatola di testo in un'immagine, le posizioni delle scatole sono uguali a un'altra immagine, ma il testo è leggermente diverso? Quale punteggio sarebbe restituito? considera solo le strutture? – user299709

+0

Se il testo è diverso, avrà un punteggio inferiore. – jterrace