FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Comparar dos JPG
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM

Comparar dos JPG

Posted: Wed Apr 25, 2007 04: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/
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Comparar dos JPG

Posted: Wed Apr 25, 2007 05: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
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM

Comparar dos JPG

Posted: Thu Apr 26, 2007 06: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/
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Comparar dos JPG

Posted: Thu Apr 26, 2007 08:01 AM
Biel,
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
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM

Comparar dos JPG

Posted: Thu Apr 26, 2007 02: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/
Posts: 182
Joined: Tue Oct 18, 2005 10:01 AM

Comparar dos JPG

Posted: Thu Apr 26, 2007 05:09 PM

Hi.

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

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

Toninho.

Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM

Comparar dos JPG

Posted: Fri Apr 27, 2007 07: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/
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM

Comparar dos JPG

Posted: Fri Apr 27, 2007 07: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.

Saludos desde Mallorca
Biel Maim贸
http://bielsys.blogspot.com/
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Comparar dos JPG

Posted: Fri Apr 27, 2007 07:30 AM

Biel,

Me alegro que te haya servido :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM

Comparar dos JPG

Posted: Tue May 22, 2007 02: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/
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM

Comparar dos JPG

Posted: Wed May 23, 2007 02: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

Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM

Comparar dos JPG

Posted: Wed May 23, 2007 04: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.
Saludos desde Mallorca
Biel Maim贸
http://bielsys.blogspot.com/
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Comparar dos JPG

Posted: Wed May 23, 2007 04: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
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM

Comparar dos JPG

Posted: Wed May 23, 2007 04: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/
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Comparar dos JPG

Posted: Wed May 23, 2007 05:40 PM

Biel,

Enhorabuena por tu aplicaci贸n de captura de im谩genes, est谩 espectacular :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion