Comparar dos JPG

Post Reply
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Comparar dos JPG

Post by Biel EA6DD »

Hola a todos,
se os ocurre alguna manera rapida para comparar dos graficos(JPG,BMP, da igual), y detectar diferencias de un a otro.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Biel,

Si los gráficos estan en formatos diferentes, la solución sería seleccionar cada uno en un hDC distinto y comparar pixel a pixel sus colores

Si lo que deseas es sólo comparar dos ficheros con igual extension, podrías calcular el CRC de cada uno de ellos y comparar los CRCs.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Post by Biel EA6DD »

Hola Antonio,
los graficos son con el mismo formato, lo del CRC lo habia estado pensando como una posibilidad, pero quizas sea mas interesante el comparar pixel a pixel, pues así podria tener un porcentaje de smilitud y no solo igual o diferente.

Estoy algo perdido con el tema, como podria hacer una lectura pixel a pixel, comparando el color.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Biel,

Code: Select all

local hBmp1 := ReadBitmap( 0, cBmpFile1 ) 
local hBmp2 := ReadBitmap( 0, cBmpFile2 )
local hDC := CreateDC( "DISPLAY",0,0,0 ) 
local hDCMem1 := CreateCompatibleDC( hDC ) 
local hDCMem2 := CreateCompatibleDC( hDC ) 
local hOldBmp1 := SelectObject( hDCMem1, hBmp1 ) 
local hOldBmp2 := SelectObject( hDCMem2, hBmp2 ) 
local nWBmp1 := nBmpWidth( hBmp1 ) 
local nHBmp1 := nBmpHeight( hBmp1 )
local nWBmp2 := nBmpWidth( hBmp2 ) 
local nHBmp2 := nBmpHeight( hBmp2 )

DeleteDC( hDC ) 

// Aqui comparas los pixeles
for n = 1 to nHBmp1
   for m = 1 to nHBmp1
      if GetPixel( hDCMem1, n, m ) != GetPixel( hDCMem2, n, m )
         MsgInfo( "son distintos" )
      endif
   next
next

SelectObject( hDCMem1, hOldBmp1 ) 
DeleteDC( hDCMem1 )
SelectObject( hDCMem2, hOldBmp2 ) 
DeleteDC( hDCMem2 )
Lo suyo sería pasar este código a C para que vaya más rápido
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Post by Biel EA6DD »

Perfecto, gracias Antonio.

Es justo lo que necesitaba, un pelin lento para lo que lo quiero, pero intentare pasarla a C , o no evaluar todos los pixels. Realmente busco similitud, y no es critico pixel arriba pixel abajo.

Muchas gracias.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
toninhofwi
Posts: 161
Joined: Tue Oct 18, 2005 10:01 am

Post by toninhofwi »

Hi.

If you need to compare two JPG files, try this:

if HB_MD5File(cFile1) == HB_MD5File(cFile2)
? "equal"
endif


Toninho.
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Post by Biel EA6DD »

Hi Toninho, thanks for your help. HB_MD5File() will be helpfull to find diferences between files.

But I will use pixel by pixel compare, because I want to know not just equal, also want to know similar.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Post by Biel EA6DD »

Gracias Antonio, con un pequeño retoque ya tengo la función haciendo justo lo que queria.

La utilizo con una camara IP, y lo que hago es detecar movimiento en la camara para disparar el sistema de grabación.

Le he añadido dos parametros, precision (pixels a evaluar), y similitud (para detectar diferencias entre colores). La funcion retorna el porcentaje de diferencia entre las dos imagenes.
Gracias por la ayuda.
Last edited by Biel EA6DD on Wed May 23, 2007 4:48 pm, edited 1 time in total.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Biel,

Me alegro que te haya servido :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Post by Biel EA6DD »

Hola Antonio,
en el ejemplo de codigo que has puesto, para que sirven las variables hOldBmb1, y hOldBmp2. Estoy intentando pasar la funcion a c, y estas variables parece que no las usamos, o no alcanzo a ver en que se usan.

Gracias anticipadas.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Willi Quintana
Posts: 859
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú
Contact:

Post by Willi Quintana »

Hola Biel,
Interesante el tema, usar una web cam para vigilancia y otras cosillas mas,,, pregunto, si por compraracion de imagenes, se activa el modo grabacion video, como se cancela la grabacion??, es decir en forma automatica?

Salu2
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Post by Biel EA6DD »

Hola Willi
pues de la misma manera que se activa. Cada x _ una imagen, la comparo con la anterior, y me devuelve un porcentaje de cambio. Si la grabacion esta activa, y el porcentaje de moviento es inferior al humbral que tengo definido para activar la grabación, se detiene la grabacion.
Image
Last edited by Biel EA6DD on Wed May 23, 2007 4:38 pm, edited 1 time in total.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Biel,

Siempre que se usa SelectObject() hay que guardar el valor que devuelve que es el objeto GDI previamente seleccionado, para restaurarlo como estaba, al final
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Post by Biel EA6DD »

Antonio,
gracias maestro. No me habia percatado de las ultimas lineas de la función. Tendre que estudiarme mas profundamente el funcionamiento de GDI.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Biel,

Enhorabuena por tu aplicación de captura de imágenes, está espectacular :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply