Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: yalosabes en 21 Marzo 2006, 19:40 pm



Título: comparar Imagenes
Publicado por: yalosabes en 21 Marzo 2006, 19:40 pm
Holas a todos, tenia una duda  :huh: : se puede comparar 2 imagenes ? porke pensaba en hacer un programa de vigilancia con mi cam , o kaso contrario alguna forma que mi cam detecte movimientos. Gracias  ;D


Título: Re: comparar Imagenes
Publicado por: Hendrix en 21 Marzo 2006, 19:48 pm
Si que se puede, te paso el kode:

Código:
Dim a As String
Dim b As String
Dim Rutaimagen As String
Dim Rutaimagen2 As String
Rutaimagen = "C:\image.jpg"
Open Rutaimagen For Binary As #1
a = Space(FileLen(Rutaimagen))
Get #1, , a
Close #1

Open Rutaimagen2 For Binary As #1
b = Space(FileLen(Rutaimagen2))
Get #1, , b
Close #1

If a = b Then
MsgBox "Estas Imagenes son iguales"
Else
MsgBox "Estas imaganes son diferentes"
End If

Espero ek te sirva....

Salu2

Hendrix




Título: Re: comparar Imagenes
Publicado por: yalosabes en 21 Marzo 2006, 19:54 pm
no entiendo ?? me podrias poner los comentarios pls solo entiendo lo de las variables pls, porfis no comprendo mucho, gracias


Título: Re: comparar Imagenes
Publicado por: Hendrix en 21 Marzo 2006, 19:56 pm
xD xD y tu kieres hacer un Centinela para la cam??? xD xD

Weno, te lo expliko, lo que hace este programa es abrir las dos imagenes que kieres mirar si son iguales, las abre en binario.

Luego las kompara, si son iguales te dice: son iguales, y si no lo son te dice: no son iguales...xD

Lo entienes???? es muy facil....

Salu2

Hendrix



Título: Re: comparar Imagenes
Publicado por: NYlOn en 21 Marzo 2006, 20:05 pm
Eso es con archivos guardados en la pc, si queres trabajar con imagenes en tiempo de ejecucion podes usar la api GetPixel
Código:
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long

Private Sub Form_Load()
Picture1.ScaleMode = vbPixels
MsgBox GetPixel(Picture1.hdc, 10, 10)
End Sub

Eso te daria el color del pixel que hay en el Picutre1 en las coordenadas 10, 10.
Te podes fijar en dos imagenes diferentes las mismas coordenadas, asi si son diferentes, el color va a ser distinto.

Saludos.-


Título: Re: comparar Imagenes
Publicado por: yalosabes en 22 Marzo 2006, 00:46 am
gracias aver primero probare el primer kodigo, es que no comprendia onde iba la seguna imagen seria : "Rutaimagen2= "C:\image2.jpg"" , solo me faltaba ver eso pa entenderlo , gracias nos vimos


Título: Re: comparar Imagenes
Publicado por: Gorky en 22 Marzo 2006, 14:21 pm
Es cierto que el codigo dado por _Hendrix_ sirve para comparar dos imagenes. Pero eso en la vida real no te va a servir ya que cuando tu recibes una imagen con la cam, y aunque no haya habido movimiento, la siguiente no es exactamente identica. Siempre hay un minimo cambio.


Título: Re: comparar Imagenes
Publicado por: Kizar en 22 Marzo 2006, 21:30 pm
Lo que tienes que hacer es comprarar cada pixel como a dicho NYlOn, usando 2 For y dar un margen de error en el color de un 20% porke siempre los colores de la cam cambian un poko.

Salu2


Título: Re: comparar Imagenes
Publicado por: LeandroA en 23 Marzo 2006, 00:28 am
Hola yo estoy haciendo exactamente lo mismo osea una alrma con una webcam y me funciona muy bien, no te paso el proyecto porque no lo termino aun y es un verdadero quilombo de codigo pero te pongo parte del codigo donde comparo las imagenes
de todas formas hice algunas automatizaciones ya que la webcam va cambiando su gama a desde que se inicia entonces tienes que hacer que la comparacion tenga ciertos rangos de diferencia (es algo dificil de explicar)

Sub Calcular()
On Error Resume Next
Dim Contador As Long, x As Long, y As Long
For x = 0 To Picture1.Width Step Picture1.Width / 100
    For y = 0 To Picture1.Height Step Picture1.Height / 100
        If GetPixel(Picture1.hdc, x, y) < GetPixel(Picture2.hdc, x, y) - 1500000 Or GetPixel(Picture1.hdc, x, y) > GetPixel(Picture2.hdc, x, y) + 1500000 Then
            Contador = Contador + 1
        End If
    Next
Next
ProgressBar1.Value = ProgressBar1.Min
If Contador > ProgressBar1.Max Then Contador = ProgressBar1.Max
ProgressBar1.Value = Contador
If Slider1.Value <= ProgressBar1.Value + 10 Then Slider1.Value = Slider1.Value + 5
If Contador >= Slider1.Value Then
    Slider1.Value = Slider1.Value + 10
    sndplaysound "C:\Archivos de programa\Windows NT\Pinball\SOUND36.WAV", SND_NODEFAULT + SND_ASYNC   'App.Path &
    Image1(3) = Image1(2)
    '-------***********-------
    If Form2.ChkVideo Then Grabar 'comienza a grabar el video
    '-------***********-------
Else
    Image1(3) = Image1(1)
    If Slider1.Value > ProgressBar1.Value + 100 Then Slider1.Value = Slider1.Value - 10
End If
End Sub


Título: Re: comparar Imagenes
Publicado por: yalosabes en 23 Marzo 2006, 03:37 am
sorry x mi ignorancia , pero como haces para grabar lo de tu cam??, es que soy inexperto ( pero con muxas ganas de aprender). Gracias spero su respuesta


Título: Re: comparar Imagenes
Publicado por: LeandroA en 23 Marzo 2006, 04:41 am
hola te paso un ejemplo

http://ar.geocities.com/leandroascierto/webcam.zip (http://ar.geocities.com/leandroascierto/webcam.zip)

fijate que de esta forma no usa timer ni ocupa el portapapeles pero 
es importante que la aplicacion este siempre visible , tambien tiene una contra de esta forma no vas a poder comparar las imagenes porque lo que hace es enviarle un hwnd  de una ventana para que el dispositivo de captura se reprodusca, yo lo que hice para la alarma es enviarle un SendMessage para que guarde constantemente las capturas en un archivo(.bmp) y luego desde alli las voy cargando a  un picture y las voy comparando cuadro por cuadro

te paso la rutina para guardar la imagen ya que en el ejemplo del enlace no lo tiene

para esto si uso un timer, pero cuando empieza a grabar el video, el timer se detiene

Dim nombre As String
'------le paso el nombre para guardar una foto
nombre = StrConv(App.Path & "\TMPfoto.bmp", vbFromUnicode)
SendMessage mCapHwnd, WM_CAP_FILE_SAVEDIB, 0, StrPtr(nombre)
Picture1.PaintPicture LoadPicture(App.Path & "\TMPfoto.bmp"), 0, 0, Picture1.Width, Picture1.Height
Picture1.Picture = Picture1.Image


Bueno no es por deslentarte pero viene complicado el asunto yo hace rato que vengo con este proyecto y aun lo puedo terminar

Saludos