elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Temas
Páginas: [1] 2
1  Programación / Programación Visual Basic / [PROYECTO] Procesamiento digital de imagen - Seguimiento de color por webcam en: 8 Febrero 2011, 10:28 am
 Hola a todos ;-). Voy a tratar de explicar mas o menos que es el procesamiento digital de imagen y las utilidades que tiene este campo hoy en día y la amplia utilidad de la misma.
 Las imágenes digitales son una matriz ó arreglo rectangular de elementos
que, usualmente son números reales. En este caso trabajaremos con imágenes RGB, es decir los colores de cada pixel de la imagen estará representado mediante la combinación de los colores rojo, verde y azul, cada uno en diferente proporción.
 La combinación RGB estándar indica 256 niveles por cada canal, es decir por cada
color rojo, verde o azul.
 Para representar el valor de 256, requerimos de 8 bits para cada canal de color. Lo que nos permite una combinación del orden 2563 lo que nos permite una combinación de casi 17 millones de colores. (16,777,216).  

 
  • Ejemplo de una matriz imagen:
Código:
|(234,067,098) (003,078,067) (056,004,006)|
|(034,067,067) (036,255,255) (067,056,255)|

 Como las imágenes son una matriz de números podemos hacer operaciones de la álgebra lineal y de este modo realizar filtros para poder obtener una cierta información de la imagen ó realizar cambios en la misma para una mejor compresión del objeto al cual se esta viendo.

 En este programa lo que se hace es habilitar la webcam para la toma de imágenes y capturar la imagen en un picture secundario  el cual luego esa imagen la leemos, el valor de cada pixel osea los valores RGB. Esta es la parte encargada de realizar esa operación:
Código:
modulo: MatrizImagen

For ContadorY = 0 To Pic.ScaleHeight - 1
For ContadorX = 0 To (Pic.ScaleWidth * 3) - 1 Step 3
Rojo = lpBits(ContadorX + 2, ContadorY)
Verde = lpBits(ContadorX + 1, ContadorY)
Azul = lpBits(ContadorX, ContadorY)

 Con eso leemos el valor del RGB que compone el color del pixel, por ejemplo: el color ROJO es (255,0,0), el VERDE es (0,255,0), y así las combinaciones van formando los diferentes tonos.

   1.1 Detección de color rojo

 En este programa trataremos de detectar el color rojo para ello usaremos una cierta tolerancia de detección dada por el hscrollbar.
Código:
'++++++++++++++++++++++detecta el color rojo+++++++++++++++++++++++++++++++++++
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
If (Rojo - Tolerancia > Azul) And (Rojo - Tolerancia > Verde) Then
n = n + 1
Rojo = 0
Verde = 200
Azul = 0
posX = posX + (ContadorX / 3 - 2) '+ posX
posY = posY + (234 - ContadorY) '+ posY
End If
 

 Con esto detectamos el color rojo y luego con la posición de los pixel rojo dentro del picture, hacemos un promedio y dibujamos un circulo :P.
 
 En el segundo ejemplo voy a pasar la imagen a binario, pero primero voy a tratar de hacerla en escala de gris.

   1.2 Escala de Grises:

Las conversiones entre las imágenes de color y las imágenes en escala de grises no son del todo directas. El ajuste de escala de grises consiste en la multiplicación de cada componente por 3 constantes definidas: Alfa, Beta y Gamma. Posteriormente se promedian las intensidades obtenidas en cada canal . Este proceso sustrae toda la información de color que contiene cada pixel y nos deja una separación de 255 niveles entre el blanco y el negro. Estas 3 constantes se obtienen como la separación entre los canales RGB y el negro:
 Alfa: Separación entre el rojo y el negro. (0.299)
 Beta: Separación entre el verde y el negro. (0.599)
 Gamma: Separación entre el azul y el negro. (0.111)
Código:
'+++++IMAGEN EN ESCALA DE GRIS++++++++++++++
Y = (Rojo1 * 0.3) + (Verde1 * 0.59) + (Azul1 * 0.11)
Otra forma:
Código:
Y = Int((0 + Rojo1 + Verde1 + Azul1) / 3)

   1.3 Imagen binaria:

 Ahora para convertirlas en binario osea 255 ó 0 debemos tomar una cierta tolerancia para considerarla negro ó blanco, en este caso mi valor en el cual considero blanco a todo aquello mayor a 100.
 
Código:
 If Y > 100 Then
   Y = 255
  Else
  Y = 0
  End If

 
 Y por ultimo solo me queda guardar los cambios en la imagen y listo  :xD
Código:
lpBits1(ContadorX1, ContadorY1) = Y
lpBits1(ContadorX1 + 1, ContadorY1) = Y
lpBits1(ContadorX1 + 2, ContadorY1) = Y

  • Librerías Utilizadas:
Código:
Public Declare Function CreateDIBSection Lib "gdi32" (ByVal hDC As Long, pBitmapInfo As BITMAPINFO24, ByVal un As Long, lplpVoid As Long, ByVal handle As Long, ByVal dw As Long) As Long 'Si la función tiene éxito, el valor de retorno es un manipulador de lo creado DIB, y * ppvBits recién puntos al bit los valores de mapa de bits.Si la función falla, el valor de retorno es NULL, y ppvBits * es NULL.
Public Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long 'identifica error
Public Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long 'dentifica un contexto de dispositivo existente.
Public Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long 'El valor devuelto indica si la DC fue puesto en libertad. Si la DC fue puesto en libertad, el valor de retorno es 1.Si la DC no fue puesto en libertad, el valor de retorno es cero.
Public Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long 'hdc[En] identifica el contexto de dispositivo.hgdiobj[En] identifica el objeto que desea seleccionar.
Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long 'hdcDest [en]Un identificador para el contexto de dispositivo de destino.nXDest [en]La coordenada x, en unidades lógicas, de la esquina superior izquierda del rectángulo de destino.nYDest [en]La coordenada y, en unidades lógicas, de la esquina superior izquierda del rectángulo de destino.[NWidth en]La anchura, en unidades lógicas, de los rectángulos de origen y destino.[NHeight en]La altura, en unidades lógicas, de la fuente y los rectángulos de destino.[HdcSrc en]Un identificador para el contexto de dispositivo de origen.[NXSrc en]La coordenada x, en unidades lógicas, de la esquina superior izquierda del rectángulo de origen.[NYSrc en]La coordenada y, en unidades lógicas, de la esquina superior izquierda del rectángulo de origen.[DwRop en]
'Un código raster-operación. Estos códigos definen cómo los datos de color para el rectángulo de origen debe ser combinado con los datos de color para el rectángulo de destino para lograr el color final.http://msdn.microsoft.com/en-us/library/dd183370(VS.85).aspx
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Public Declare Function DeleteDC Lib "gdi32" (ByVal hDC As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Ptr() As Any) As Long
Public Declare Function capCreateCaptureWindow Lib "avicap32.dll" _
    Alias "capCreateCaptureWindowA" ( _
    ByVal lpszWindowName As String, _
    ByVal dwStyle As Long, _
    ByVal X As Long, _
    ByVal Y As Long, _
    ByVal nWidth As Long, _
    ByVal nHeight As Long, _
    ByVal hwndParent As Long, _
    ByVal nID As Long) As Long
  
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
    ByVal hWnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    lParam As Any) As Long
  
Public Declare Function DestroyWindow Lib "user32" (ByVal hndw As Long) As Boolean
Private Declare Function BitBlt Lib "gdi32" ( _
    ByVal hDestDC As Long, _
    ByVal X As Long, _
    ByVal Y As Long, _
    ByVal nWidth As Long, _
    ByVal nHeight As Long, _
    ByVal hSrcDC As Long, _
    ByVal xSrc As Long, _
    ByVal ySrc As Long, _
    ByVal dwRop As Long) As Long
  
' Recupera la imagen del área del control
Private Declare Function GetWindowDC Lib "user32" (ByVal hWnd As Long) As Long

Espero que se puede seguir con este proyecto para realizar diferentes utilidades y para la investigación, yo por lo pronto estoy tratando de hacer la deteccion de contornos para poder identificar formas de objetos y medidas pero estoy con lo teórico recien XD. Les dejo ademas unos artículos sobre tratamiento de imágenes que me ayudaron en mucho y que me van a seguir ayudando jaja.



 
  • DESCARGA:
Código:
http://www.gigasize.com/get.php?d=s3nqrhtnfpf

   1.4 Invertir colores (Negativo):

Esta operación consiste en invertir cada canal RGB a su negativo (Sí, suena redundante). Por ejemplo, en una película fotográfica en la cual se plasman los colores invertidos de la imagen real. Esto es que el blanco pasa a ser negro, el azul a amarillo, verde a magenta y rojo a cyan. La utilidad de este filtro, se encuentra en la digitalización de películas fotográficas.
 
Código:
Operacion del ajuste: [(255-R),(255-G),(255-B)]
Código:
For ContadorY1 = 0 To Pic.ScaleHeight - 1
For ContadorX1 = 0 To (Pic.ScaleWidth * 3) - 1 Step 3
Rojo1 = lpBits1(ContadorX1 + 2, ContadorY1)
Verde1 = lpBits1(ContadorX1 + 1, ContadorY1)
Azul1 = lpBits1(ContadorX1, ContadorY1)
'++++++++++++++++matriz operacion++++++++++++++++++++++++++++++++++
lpBits1(ContadorX1, ContadorY1) = 255 - Rojo1
lpBits1(ContadorX1 + 1, ContadorY1) = 255 - Verde1
lpBits1(ContadorX1 + 2, ContadorY1) = 255 - Azul1
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Next ContadorX1
Next ContadorY1
CopyMemory ByVal VarPtrArray(lpBits1), 0&, 4
dl1 = BitBlt(Pic.hDC, 0, 0, Pic.ScaleWidth, Pic.ScaleHeight, TmpDC1, 0, 0, SRCCOPY)
dl1 = SelectObject(TmpDC1, AntBmp1)
dl1 = DeleteObject(mBmp1)
dl1 = DeleteDC(TmpDC1)
Pic.Refresh


   1.5 Detección de contornos (by 79137913)

 Esta técnica utiliza el cambio numérico dado por los pixel (en escala de gris)  de un entorno del mismo. Cuando estos cambios son menores a un valor dado (en este caso 9) es por que en el existe un entorno ó borde.
 ΔX = X1-X2
Código:
Dim tmp1 As Integer, tmp2 As Integer, tmp3 As Integer
'+++++IMAGEN EN ESCALA DE GRIS++++++++++++++
Y = Int((0 + Rojo1 + Verde1 + Azul1) / 3)
lpBits1(ContadorX1, ContadorY1) = Y
lpBits1(ContadorX1 + 1, ContadorY1) = Y
lpBits1(ContadorX1 + 2, ContadorY1) = Y
'+++++DETECCION DE BORDE++++++++++++++++
If ContadorX1 <> 0 And ContadorY1 <> 0 Then 'osea distinto de cero
            tmp3 = lpBits1(ContadorX1 - 1, ContadorY1 - 1)
            tmp2 = lpBits1(ContadorX1 - 1, ContadorY1)
            tmp1 = lpBits1(ContadorX1, ContadorY1 - 1)
            If Abs(tmp2 - tmp1) > 9 Or Abs(tmp3 - tmp1) > 9 Then
                lpBits1(ContadorX1 - 1, ContadorY1 - 1) = 0
                lpBits1(ContadorX1 - 2, ContadorY1 - 1) = 0
                lpBits1(ContadorX1 - 3, ContadorY1 - 1) = 0
            Else
                'PINTA DE NEGRO EL PIXEL POR QUE AHI HAY UN BORDE
                lpBits1(ContadorX1 - 1, ContadorY1 - 1) = 255
                lpBits1(ContadorX1 - 2, ContadorY1 - 1) = 255
                lpBits1(ContadorX1 - 3, ContadorY1 - 1) = 255
            End If
            End If

Next ContadorX1
Next ContadorY1


2  Programación / Programación Visual Basic / (resuelto)Proyecto robotica[cam - imagen] en: 3 Junio 2009, 21:46 pm
 Hola a todos estoy realizando un proyecto en robotica para la detección de fallas en piezas metalicas, lo que hago es tomar una foto de la pieza con una cam y luego le quito los colores lo dejo en negro y blanco su contorno, pero ahora no se como hacer un vector que me analice el contorno de la figura a travez de un vector si alguien tiene alguna idea para darme bienvenido sea.
  Lo q esta en rojo en la imagen es lo q quiero hacer un vector q me de la distancia a si si se encuntra anomalia en otra pieza da el aviso

3  Seguridad Informática / Abril negro / ^[Abril Negro]Una mirada distinta a la conexion de un malware ó troyano en: 29 Abril 2009, 23:54 pm
 Bueno presento este informe donde trato de explicar una nueva forma de conexión para malwares y troyanos a través del uso de server mediadores entre el cliente y el server. Paro lograrlo usaremos un server irc y uno ftp, es una conexion 100% segura y ademas al ser Lan to Lan, conecta ambas partes sin importar si existen router de por medio o en ambas partes. :P.
 http://rapidshare.com/files/227274522/Una_mirada_distinta_a_la_conexion_de_un_troyano_IRC-FTP_.pdf.html

http://beto123456789.webcindario.com/Una mirada distinta a la conexion de un troyano(IRC-FTP).pdf


Tema relacionado: http://foro.elhacker.net/analisis_y_diseno_de_malware/synapse_zombie_backdoor_lan_to_lan-t196955.0.html;msg938287#msg938287
PD: Incorpore un source de una herramienta llamada FileManagerLix. Este post es de consulta general
4  Programación / Programación Visual Basic / copiar archivo en windows vista en: 16 Noviembre 2008, 04:29 am
 hola amigos he intentado de dos forma de copiar un archivo en windows vista y ninguno me funciono alguien podria darme una mano...

esta forma es usando la api

***en el form******

Código:
RetO = CopyFileEx(MySelf, drive & "\" & FileName, AddressOf CopiarArchivo, _
                                 ByVal 0&, 0, COPY_FILE_RESTARTABLE)
  End If


*****en un modulo********

Código:
Option Explicit

 'Constantes para el Api CopyFileEx
Public Const COPY_FILE_FAIL_IF_EXISTS = &H1
Public Const COPY_FILE_RESTARTABLE = &H2

 'Declaración Api CopyFileEx para copiar archivos con progreso
Public Declare Function CopyFileEx Lib "KERNEL32.DLL" Alias "CopyFileExA" ( _
     ByVal lpExistingFileName As String, _
     ByVal lpNewFileName As String, _
     ByVal lpProgressRoutine As Long, _
     lpData As Any, _
     ByRef pbCancel As Long, _
     ByVal dwCopyFlags As Long) As Long

 'función para copiar
 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 Public Function CopiarArchivo(ByVal TotalFileSize As Currency, ByVal _
                                    TotalBytesTransferred As Currency, _
                                    ByVal StreamSize As Currency, _
                                    ByVal StreamBytesTransferred As Currency, _
                                    ByVal dwStreamNumber As Long, _
                                    ByVal dwCallbackReason As Long, _
                                    ByVal hSourceFile As Long, _
                                    ByVal hDestinationFile As Long, _
                                   ByVal lpData As Long) As Long

End Function



y luego tambien probe con
Código:
FileCopy rutaarchivoorigen, rutaarchivodestino

 Y sin resultado en ambos casos  :huh:
5  Programación / Programación Visual Basic / Autoinicio en Windows vista en: 3 Noviembre 2008, 06:38 am
 Hola me surgio una duda y como no tengo windows vista no lo se. La clave del registro para iniciar con el windows es la misma en windows vista?? se puede escribir en el registro de la misma forma que con win xp??? que otro modo de autoinicio existe???
6  Programación / Programación Visual Basic / Widget SpeedTest (Mide la velocidad de internet en tu escritorio) en: 30 Agosto 2008, 21:32 pm
    Bueno como dice el asunto aca dejo un source de como hacer un widget con un control para imagenes PNG echo por Cobein.

    Es uno de los widget que me faltaba para mi coleccion asi que lo comparto con ustedes: ;)

DESCARGA:   http://beto123456789.webcindario.com/SpeedTest.rar



http://beto123456789.webcindario.com/widget.PNG
7  Programación / Programación Visual Basic / Ejecutar un bat desde vb6 en: 29 Enero 2008, 02:21 am
 Hola esa es la pregunta nose como ejecutar un bat en vb6 y que funcione. El bat lo que hace es descargar un archi a travez de un dat.
    Pero cuando lo ejecuto desde vb6 no funciona y cuando lo ejecuto con doble clik del mouse si... :huh:

 http://beto123456789.webcindario.com/BajarSolo.zip

 Lo nesesito ya que estoy haciendo un scaner de virus gracias desde ya.

 Pd: ejecuten el bat manualmente y vera que comienza a descargar el programa pero desde vb6 e probado de las siguintes formas y no finciona

Shell "cmd.exe /k" & p & App.Path & "\Scan\BajarSolo.bat", vbNormalFocus
Shell App.Path & "\Scan\BajarSolo.bat", vbNormalFocus

 con API
Dim res As Long
res = shellExecute(Me.hwnd, "Open",App.Path & "\Scan\BajarSolo.bat ", "", "", 1)

 Esto me esta volviendo loco Ayudaaaaaaa :rolleyes:
8  Programación / Programación Visual Basic / Visor de uso de Ram--CPU--Disco--ver Clima-- en: 13 Enero 2008, 17:43 pm
 Bueno alli va mi pregunta existe algun codigo o algo relacionado que nos muestre el estado de la ram en % en un pequeño grafico. O al menos algo que nos tire numeros sobre el estado de la ram o del CPU.
   ;D ;D ;D
 Desde ya gracias





Salu2 Sirlix
9  Programación / Programación Visual Basic / Reconoce la voz en: 18 Enero 2007, 03:20 am
  Esto he buscado hace tiempo y ahora que lo encuenro no funciona. Alguin me puede decir si esto funciona :-( :-(
http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=43172&lngWId=1
10  Programación / Programación Visual Basic / irc mensajes en: 15 Julio 2006, 23:26 pm
 La pregunta que les tengo es como hacer para que los mensajes que me llegan los copie en el Text8.text
  Aqui en la imagen les muestro con dos clientes Irc


Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines