comparar Imagenes

Iniciado por yalosabes, 21 Marzo 2006, 19:40 PM

0 Miembros y 1 Visitante están viendo este tema.

yalosabes

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

Hendrix

Si que se puede, te paso el kode:

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


"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

yalosabes

no entiendo ?? me podrias poner los comentarios pls solo entiendo lo de las variables pls, porfis no comprendo mucho, gracias

Hendrix

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

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

NYlOn

Eso es con archivos guardados en la pc, si queres trabajar con imagenes en tiempo de ejecucion podes usar la api GetPixel

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.-

yalosabes

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

Gorky

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.

Kizar

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

LeandroA

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

yalosabes

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