Comparar dos JPG

Comparar dos JPG

Postby Biel EA6DD » Wed Apr 25, 2007 4:15 pm

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
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Postby Antonio Linares » Wed Apr 25, 2007 5:24 pm

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
Antonio Linares
Site Admin
 
Posts: 41901
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Biel EA6DD » Thu Apr 26, 2007 6:44 am

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
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Postby Antonio Linares » Thu Apr 26, 2007 8:01 am

Biel,
Code: Select all  Expand view
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
Antonio Linares
Site Admin
 
Posts: 41901
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Biel EA6DD » Thu Apr 26, 2007 2:30 pm

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/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Postby toninhofwi » Thu Apr 26, 2007 5:09 pm

Hi.

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

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


Toninho.
toninhofwi
 
Posts: 172
Joined: Tue Oct 18, 2005 10:01 am

Postby Biel EA6DD » Fri Apr 27, 2007 7:03 am

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: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Postby Biel EA6DD » Fri Apr 27, 2007 7:14 am

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
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Postby Antonio Linares » Fri Apr 27, 2007 7:30 am

Biel,

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41901
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Biel EA6DD » Tue May 22, 2007 2:56 pm

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
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Postby Willi Quintana » Wed May 23, 2007 2:40 pm

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
Willi Quintana
 
Posts: 1010
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Postby Biel EA6DD » Wed May 23, 2007 4:24 pm

Hola Willi
pues de la misma manera que se activa. Cada x segundos capturo 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
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Postby Antonio Linares » Wed May 23, 2007 4:37 pm

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
Antonio Linares
Site Admin
 
Posts: 41901
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Biel EA6DD » Wed May 23, 2007 4:43 pm

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
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Postby Antonio Linares » Wed May 23, 2007 5:40 pm

Biel,

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41901
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 33 guests