• Viernes 3 de Mayo de 2024, 02:48

Autor Tema:  Ocx Visual Basic  (Leído 4497 veces)

riciar

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Ocx Visual Basic
« en: Martes 21 de Diciembre de 2004, 14:25 »
0
Necesito saber como hacer para reconocer un objeto o una imagen dentro de un PictureBox.

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Ocx Visual Basic
« Respuesta #1 en: Martes 21 de Diciembre de 2004, 14:47 »
0
Hola riciar.

¿A qué te refieres cuando dices 'reconocer'?¿Tendrías que reconocer un objeto (supongo que te refieres a un control contenido en él) o la imagen?

Intenta concretar más. Chao.

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Ocx Visual Basic
« Respuesta #2 en: Martes 21 de Diciembre de 2004, 15:17 »
0
SERIA COMO EL RECONOCIMIENTO DE IMAGENES, LO QUE HACEN CON LOS ROSTROS DE LOS MAS BUSCADOS DE LA POLICIA?
ALGO ASI, CREO YO
El pasado son solo recuerdos, el futuro son solo sueños

riciar

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Re: Ocx Visual Basic
« Respuesta #3 en: Lunes 27 de Diciembre de 2004, 13:15 »
0
Brozz gracias por contestar.
Lo que quiero hacer es encontrar una imagen patron dentro de otra, por ejemplo en un picture box tengo un mouse que lo uso de patron y el programa lo tiene que encontrar dentro de otro picture box donde hay varios objetos incluido el mouse.
Si tienes algo que me ayude te lo agradeceria.

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Ocx Visual Basic
« Respuesta #4 en: Lunes 27 de Diciembre de 2004, 18:10 »
0
Hola riciar.

La forma que se me ocurre para resolver esto puede hacerse lenta y consumidora de recursos, pero...

En principio dices que tienes cierta imagen que debes usar como patrón para localizarla posteriormente. Ok, yo almacenaría esa imagen en una matriz de 'Ancho , Alto dimensiones' (o si lo prefieres de una dimensión Ancho x Alto) de tipo Long. A continuación mediante un bucle recorrería la imagen patrón 'escaneando' el valor de cada punto y asignando su color al respectivo punto de la matriz. Para averiguar el color de cada punto usa la función Point.

A continuación recorre la imagen que quieres comparar buscando la coincidencia con los correspondientes elementos de la matriz. Una vez que encuentres coincidencia con el primer elemento, continua comprobando puntos hasta el ancho del patrón. Si en algun momento deja de haber coincidencia, continúa con el escaneo, si no, al llegar al ancho del patrón, comprueba una nueva línea comenzando en la fila que coincidió de primera.

No sé si no me habré embrollado un poco explicando esto último, pero seguro que tomas la idea rápidamente. Ánimo que implementar esto no debe ser complicado (otra cosa es que el resultado pueda ser exasperantemente lento).

Te pondría un código de ejemplo, pero es que ahora en breve me voy a casa. Si tal y tienes dificultades en otro momento hablamos.

Chau.

Cyclop

  • Miembro MUY activo
  • ***
  • Mensajes: 323
    • Ver Perfil
    • http://www.geocities.com/icotext/spanish/
Re: Ocx Visual Basic
« Respuesta #5 en: Lunes 27 de Diciembre de 2004, 20:32 »
0
Seria mejor convertirlo a imagen de 16bits y de ahi hacer la busqueda

Salu2
Icotext Evolution v0.5 para los amantes del ASCII Art
http]

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Ocx Visual Basic
« Respuesta #6 en: Martes 28 de Diciembre de 2004, 09:40 »
0
Hola Cyclope.

Podría no funcionar el reconocimiento por alguna posible pérdida de color...¿no?

Para optimizar desde luego que lo mejor sería copiar las imagenes a bitmaps compatibles seleccionados en un DC para luego comprobar el DC y así evitar trabajar directamente en el control.

También podría ser interesante usar C, por ejemplo, y no VB, pero...

Chao.

riciar

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Re: Ocx Visual Basic
« Respuesta #7 en: Martes 28 de Diciembre de 2004, 13:08 »
0
Hola Brozz.
OK esa forma estaria buena, intentare a ver que pasa.
Por otro lado buscando en todos los foros encontre a un tal Gandalf el gris o algo asi, que en una discucion menciono que habia hecho programas para reconocer caras, pero no se como comunicarme con el, seguire intentando.

Hasta luego.

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Ocx Visual Basic
« Respuesta #8 en: Martes 28 de Diciembre de 2004, 17:28 »
0
Para intentara hablar con Gandalf_malaga7:

http://foros.solocodigo.com/index.php?showuser=5708

Donde dice algo así como 'Correo          pincha aquí', pos eso, pincha ahí.
También puedes probar con un mensaje personal, aunque si hace tiempo que no estra por aquí, pues...

Chao.

Jeshu

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Ocx Visual Basic
« Respuesta #9 en: Viernes 28 de Septiembre de 2007, 05:37 »
0
Mmmm.... holas , soy nueva en este foro y en estos momentos me encuentro en aprietos, ya que necesito saber como comparo elementos dentro de un arreglo; por si alguien no entiende genere un arreglo de 1 a 15 con numeros en su interior, la cosa es que dentro del arreglo hay numeros que se repiten y este arreglo tiene que ser con numeros del 1 al 25 todos distitos.... Si alguien me puede ayudar seria excelente....


Besos...

ezequielminor

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
    • http://www.learningzone.com.ar
Re: Ocx Visual Basic
« Respuesta #10 en: Martes 2 de Octubre de 2007, 00:18 »
0
para comparar los elementos de un arreglo solo basta con recorrerlo y compararlo con el 2do arreglo . por ejemplo

dim MiArreglo(15) as string
dim Numero as integer, i as integer
dim Coincidencias as integer
Numero = 0
Coincidencias = 0

For i = 0 to 15
 For Numero = 0 to 15
    if Numero = MiArreglo(i) Then
    Coincidencias = Coincidencias + 1
    End If
         If Coincidencias > 1 Then
         MsgBox("Se Repite el numero" & Numero)
  Next Numero
Next i

no estoy muy seguro de su funcionamiento, cuando vuelva  a tener contacto con mi computadora , te traigo un codigo fuente  :hola:

Jeshu

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Ocx Visual Basic
« Respuesta #11 en: Martes 2 de Octubre de 2007, 20:55 »
0
Muchas gracias, algo asi es  lo que necesitaba...

Besos.....

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Ocx Visual Basic
« Respuesta #12 en: Viernes 5 de Octubre de 2007, 06:42 »
0
Cita de: "Brroz"
Hola riciar.

La forma que se me ocurre para resolver esto puede hacerse lenta y consumidora de recursos, pero...

En principio dices que tienes cierta imagen que debes usar como patrón para localizarla posteriormente. Ok, yo almacenaría esa imagen en una matriz de 'Ancho , Alto dimensiones' (o si lo prefieres de una dimensión Ancho x Alto) de tipo Long. A continuación mediante un bucle recorrería la imagen patrón 'escaneando' el valor de cada punto y asignando su color al respectivo punto de la matriz. Para averiguar el color de cada punto usa la función Point.

A continuación recorre la imagen que quieres comparar buscando la coincidencia con los correspondientes elementos de la matriz. Una vez que encuentres coincidencia con el primer elemento, continua comprobando puntos hasta el ancho del patrón. Si en algun momento deja de haber coincidencia, continúa con el escaneo, si no, al llegar al ancho del patrón, comprueba una nueva línea comenzando en la fila que coincidió de primera.

No sé si no me habré embrollado un poco explicando esto último, pero seguro que tomas la idea rápidamente. Ánimo que implementar esto no debe ser complicado (otra cosa es que el resultado pueda ser exasperantemente lento).

Te pondría un código de ejemplo, pero es que ahora en breve me voy a casa. Si tal y tienes dificultades en otro momento hablamos.

Chau.
aunque es eficaz es una forma lenta, demasiado lenta, por de pronto se me ocurre como ganarle velocidad usando el mismo algoritmo que describes. Lo comento:

Se supone que la coincidencia de patrón es igual, ya que si no es preciso usar otro algoritmo.
Lo 1º indicar que la API getPixel es más rápida... que point.

 Cuando encuentras una coincidencia del primer punto de la 1ª línea, lo que debes hacer no es buscar el siguiente, sino x siguientes más allá si también aparece, ahora busca x líneas más abajo, es decir hallnado 1 coincidencia marcas buscar dos coincidencias más en un área cuadrada (los 3 puntos deben formar un triángulo), si hay éxito comprueba nuevamente otros 3 puntos en distancias aleatorias , la probabilidad de que sean exactos es muy baja (salvo que haya pocos colores, es decir un patrón con poco contraste, mucho brillo, etc...), si el nuevo triángulo coincide, entonces examínalo desde principio a fin de corrido como indicas, si falla el 2º triángulo, el primero o tan sólo el 2º punto, fíjate que con sólo 2,3 ó 6 puntos puedes descartar un área cuadrada... sin necesidad de recorrerla punto a punto. entonces una imagen de pongamos 800x600 la puedes recorrer en apenas unos miliSg, frente a los varios segundos (10-30) que podría suponer revisar una imagen completa píxel a píxel con point.
«Ma non troppo»
----> ModoVacaciones = False<----