6

estoy trabajando en un proyecto en el que en un momento dado tengo que comparar dos images.can a nadie por favor me ayude con un método de hacer so..By la forma en que las imágenes son capturas de pantalla de una software. quería comprobar si las dos imágenes son idénticas, incluidos los números y las letras que aparecen en la imagen (captura de pantalla del software) ..código python para comparar imágenes en Python

+0

¿Qué quiere decir cuando se dice comparar? ¿Quieres ver si son idénticos? ¿Estás buscando detalles sobre cómo hacer esto en Python o cómo comparar imágenes en general? –

+0

sí que quería comparar para ver si son idénticos incluyendo los números/letras que aparecen en el software – stallion

Respuesta

6

Hay siguientes maneras de hacer la comparación adecuada.

  • En primer lugar es el Root-Mean-Square Diferencia #

Para obtener una medida de la similitud de dos imágenes son, se puede calcular el valor de la raíz cuadrada media (RMS) de la diferencia entre las imágenes. Si las imágenes son exactamente idénticas, este valor es cero. La siguiente función usa la función de diferencia y luego calcula el valor RMS del histograma de la imagen resultante.

# 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])) 
  • Otra es comparación exacta #

La forma más rápida para determinar si dos imágenes tienen exactamente el mismo contenido es obtener la diferencia entre las dos imágenes, y luego calcular el delimitador cuadro de las regiones distintas de cero en esta imagen. Si las imágenes son idénticas, todos los píxeles en la imagen de diferencia son cero, y la función de cuadro delimitador devuelve None.

import ImageChops 

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

No puedo dar una respuesta lista para usar, pero le indicaré (I piensa) la dirección correcta. Una manera simple de comparar dos imágenes es haciendo un hash de sus representaciones binarias y luego ver si esos hashes son los mismos. Un problema con esto es con la función hash que desea utilizar y se debe buscar uno que tiene bajas probabilidades de colisiones, y la otra es que un archivo de imagen probablemente ha metadatos adjuntos a la información binaria original, por lo que tendrá que buscar sobre cómo cortar esos metadatos para comparar las imágenes solo usando su información binaria. Además, no sé con seguridad, pero probablemente la representación binaria de una imagen codificada en formato jpg es diferente de una imagen codificada en formato PNG, por lo que debe ser consciente de ello.

6

estoy manteniendo una biblioteca de Python llamada pyssim que utiliza el método Structured Similarity (SSIM) para comparar dos imágenes.

No tiene enlaces de python, pero el programa perceptualdiff también es increíble al comparar dos imágenes, y bastante rápido.

+0

es la pyssim una especie de una comparación difusa? ¿Qué pasa si hay cajas de texto en una imagen, las posiciones de las cajas son iguales con otra imagen, pero el texto es ligeramente diferente? ¿Qué puntaje devolvería? ¿solo considera las estructuras? – user299709

+0

Si el texto es diferente, tendrá un puntaje más bajo. – jterrace