2012-03-19 24 views
8

En mi aplicación, quiero capturar dos imágenes con la cámara y luego quiero comparar esas imágenes.comparar dos imágenes en android

Entonces, ¿cómo puedo comparar dos imágenes?

EDITAR: Comparar La primera imagen es exacta como la segunda imagen de píxel a píxel.

Gracias.

+0

Definir comparar. –

+0

¿Qué es 'comparar'? Puede buscar similitudes morfológicas, color, frecuencia, etc. etc. – jose

+2

A menos que tenga un trípode mágico, esas dos capturas de cámara _no_ van a coincidir en una base de píxel a píxel. –

Respuesta

6

1. Compruebe que la altura coincida, si no devuelve falso. Luego, verifique si el ancho coincide, y si no, devuelva falso. Luego revise cada píxel hasta que encuentre uno que no coincida. Cuando lo hagas, devuelve falso. Si cada píxel coincide, devuelve verdadero.

Pseudocódigo:

bool imagesAreEqual(Image i1, Image i2) 
{ 
    if (i1.getHeight() != i2.getHeight()) return false; 
    if (i1.getWidth() != i2.getWidth()) return false; 

    for (int y = 0; y < i1.getHeight(); ++y) 
     for (int x = 0; x < i1.getWidth(); ++x) 
      if (i1.getPixel(x, y) != i2.getPixel(x, y)) return false; 

    return true; 
} 

en la realidad, es probable que quieren tratar la imagen como una matriz bidimensional si es posible, y simplemente comparar los bytes. No sé la API de imagen de Android, pero getPixel podría ser lento.

2. quizás convierta las imágenes en Byte64 Strings y luego las compare.

3. * * OpenCV lib para Android:
tiene a las funciones para las imágenes de compresión

** a.
Core.absdiff()b.Core.compare()

para más detalles ver comparing two images

+0

Los comentarios en la publicación señalan un defecto fundamental en la pregunta, pero en cuanto a esta respuesta, conceptualmente es correcta, pero use 'getPixels' y no' getPixel' ya que tendrá una diferencia de velocidad significativa. – kabuko

+0

kabuko Ya mencioné en mi respuesta que este método podría tardar en hacer coincidir pixel con piexl –

+0

Sí, está bien. Solo estaba señalando la API para usar si alguien fuera a tomar esta ruta. – kabuko