¿Cómo verificar que 2 imagenes son iguales o distintas?
Buen día
Me gustaría saber un metodo para comparar 2 imagenes y saber si son iguales o distintas. He visto unos ejemplos pero no me funcionan, espero me puedan ayudar. Gracias de antemano. |
¿Qué ejemplos y por qué no funcionan?
|
Estoy usando::
Código:
if Image1.Picture.Bitmap.Canvas.Pixels[0,0] = Image2.Picture.Bitmap.Canvas.Pixels[0,0] then |
También estoy usando un Timer
Código:
procedure TForm5.Button1Click(Sender: TObject); |
|
Je, je, je... ya sé de dónde has tomado ese código :)
Pero si lo lees bien, habrás visto que pone: Debería bastar con dos For anidados, uno para recorrer filas y otro columnas: Tú estás comparando el primer pixel, tienes que recorrer toda la imagen para ir comparándola con la otra. |
Cita:
|
Y porque no obtener el hash md5 o sha de ambas y comparar estos para saber si son distintos o iguales...?
|
Cita:
La otra alternativa es volcar a Streams ambos e invocar a CompareMem a ambos Streams pero esto también tiene su costo ya que estás duplicando la memoria utilizada, ¡Estás generando copias de los bitmpas originales!. En el enlace que ha puesto en StackOverflow se discutieron estas 2 alternativas. Saludos, |
Cita:
|
Una pregunta que tal vez parezca tonta...
¿Un único pixel diferente en las imágenes, debería devolver que son diferentes? O dicho de otra manera, ¿La comparación debe omitir pequeños cambios? Si la respuesta es que deben ser "exactas", creo que comparar pixel a pixel te será más lento que calcular un CRC o HASH del fichero y compararlos. Si la respuesta es que no (por ejemplo en aplicaciones de detección de movimiento) los métodos de comparación siguen otras técnicas un poco diferentes. |
Cita:
Calcular Hash o MD5 por ejemplo requiere de muchas más operaciones. Son operaciones consideradas "duras". Si ya de por si para calcular el hash o md5 se necesita leer el contenido binario, directamente que se lea la imagen y se haga el trabajo de comparar. Creo que no vale la pena emplear hash u otros, es más directo y menos lioso realizar una comparación. Si la comparación permite ciertos cambios o aproximación entre ambas, o como en el caso de detección de movimientos, allí las cosas si se complican y hay que optar por otras soluciones como dices. El componente que ofrece la página que a puesto MAXIMUM creo que hace estos tipos de cosas. |
La franja horaria es GMT +2. Ahora son las 14:32:20. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi