Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-09-2015
deliriun deliriun is offline
Miembro
 
Registrado: ago 2014
Posts: 51
Poder: 10
deliriun Va por buen camino
Question ¿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.
Responder Con Cita
  #2  
Antiguo 26-09-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Qué ejemplos y por qué no funcionan?
Responder Con Cita
  #3  
Antiguo 26-09-2015
deliriun deliriun is offline
Miembro
 
Registrado: ago 2014
Posts: 51
Poder: 10
deliriun Va por buen camino
Estoy usando::

Código:
if Image1.Picture.Bitmap.Canvas.Pixels[0,0] = Image2.Picture.Bitmap.Canvas.Pixels[0,0] then
       begin
       showMessage('Iguales');


 End;
Pero siempre me sale el mensaje, sean iguales o no.
Responder Con Cita
  #4  
Antiguo 26-09-2015
deliriun deliriun is offline
Miembro
 
Registrado: ago 2014
Posts: 51
Poder: 10
deliriun Va por buen camino
También estoy usando un Timer

Código:
procedure TForm5.Button1Click(Sender: TObject);
begin
if Image1.Picture.Bitmap.Canvas.Pixels[0,0] = Image2.Picture.Bitmap.Canvas.Pixels[0,0] then
       begin
       showMessage('Iguales');


 End;
end;

procedure TForm5.Timer1Timer(Sender: TObject);
begin
Image1.Picture.LoadFromFile('E:\Test.bmp');
end;
Y estoy editando Test.bmp constantemente pero siempre me sale el mensaje
Responder Con Cita
  #5  
Antiguo 26-09-2015
tmsanchez tmsanchez is offline
Miembro
 
Registrado: mar 2004
Ubicación: Mexico
Posts: 67
Poder: 21
tmsanchez Va por buen camino
Intenta lo que mencionan aquí:

http://stackoverflow.com/questions/1...s-are-the-same

Saludos.
Responder Con Cita
  #6  
Antiguo 26-09-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita
  #7  
Antiguo 26-09-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por tmsanchez Ver Mensaje
Intenta lo que mencionan aquí:
http://stackoverflow.com/questions/1...s-are-the-same
Saludos.
Esa forma es más eficiente que el doble bucle
Responder Con Cita
  #8  
Antiguo 27-09-2015
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Y porque no obtener el hash md5 o sha de ambas y comparar estos para saber si son distintos o iguales...?
Responder Con Cita
  #9  
Antiguo 27-09-2015
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por cloayza Ver Mensaje
Y porque no obtener el hash md5 o sha de ambas y comparar estos para saber si son distintos o iguales...?
Aunque en principio es buena idea, es un esfuerzo adicional para la máquina. Calcular un hash o md5 requiere de muchísimas más operaciones. Le lleva más tiempo. Es más apropiado hacer un CompareMem sobre cada fila de pixels.

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,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #10  
Antiguo 28-09-2015
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Cita:
Empezado por deliriun Ver Mensaje
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.
Esta es tu solución http://www.3delite.hu/Object%20Pasca...onLibrary.html
Responder Con Cita
  #11  
Antiguo 28-09-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.265
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #12  
Antiguo 28-09-2015
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Neftali Ver Mensaje
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.
Si se trata de una comparación exacta leer pixel a pixel es lento, por ello para acelerar el proceso se puede hacer mediante Scanline() y aprovechar CompareMem() y esto requiere explorar solo fila a fila. En el hilo de StackOverflow se da también esta propuesta y me parece bastante ingeniosa.
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.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Cómo verificar clave ingresada por usuario? titooo MS SQL Server 9 24-04-2013 17:07:28
Como verificar si un e-mail existe? pnsd_89 Internet 2 19-07-2011 18:35:26
Detectar en un label registros con valores iguales y mostrarlo como uno solo Rofocale Varios 7 16-06-2011 09:48:20
como verificar el cambio de estado o valor de una variable gonza_619 Varios 7 06-09-2010 20:48:41
Como verificar si un txt existe? danytorres Varios 1 02-12-2003 15:51:20


La franja horaria es GMT +2. Ahora son las 16:18:23.


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
Copyright 1996-2007 Club Delphi