Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Como ya estoy de medio vacaciones, pero a la vez no tengo demasiados medios técnicos, me dedico a recopilar datos y a procesarlos como puedo en mi cabecilla, para poder hacer cosas en verano.
Como sabeis estoy con el tema del Bluetooth... a falta de hacer algunas pruebas con otro ordenador, el tema del TouchPad... necesito más medios que mi portatil... y... ahora viene el proyecto guapi guapi... Visión artificial con una simple webcam, entonces aqui vienen mis preguntas y aclaraciones:
·Sé que es posible, porque si no me equivoco Golfus Hispanicus lo emplea, asi como otros proyectos como los de esta chiquita tan maja: Mavis
·¿Cómo se empieza en este mundito?
·¿Qué librerías usais para obtener imágenes de la webcam?
·¿Qué librerías usais para procesar la imagen?
·¿Es imprescindible programar el sistema en C?
·¿Tenemos algun proyecto de ejemplo?
Yo estoy comenzando con la librería WebCam.dll, pero me temo que es muy incompleta, y además consume demasiados recursos comparándolo con el proyecto de Mavis. Aun así, tengo un programa hecho que lo único que tiene es un botón, con el que al pulsarlo, se copia la imágen de la webcam en un control PictureBox... me imagino que es un primer paso en este mundo, y que me quedan miles de caminos que recorrer, pero esta librería no sé si da mucho más de si, de modo que me gustaría que alguno que haya trabajado con esto me eche un cablecillo.
Seguiré informando. Muchas gracias por la ayuda.
Ángel
De todos modo es posible que este método sea muy útil para detectar tonalidades de rojo, no?
Seria posible modificar las secuencias RGB para convertirlas en GBR o GRB sin usar micho micro?
Es posible que en ese caso si fuesen utiles...
Un saludo a todos!
Si, seria posible, y sin usar demasiado micro, porque podemos diferenciar los colores con la propiedad picturebox1.getpixel(x, y).R o .G o .B, de modo que podriamos desordenar la cadena en poco mas de 4 instrucciones, pero no le veo la utilidad... seguramente tu si, si puedes comentame de que nos serviria, ya sabes que necesitamos muchas ideas.
En cuanto al tema de Ranganok ... tronco no he entendido nada, he visto un par de esquemas en la wikipedia sobre el color en forma cuica, pero si te digo la verdad me he quedado igual que estaba. Sospecho que a lo que estamos intentando tender todos es a trabajar con profundidad de color, pero estoy segurisimo de que hay un metodo simple como:
picturebox.getpixel(x, y).profundidaddecolor
Yo no lo he encontrado, pero si he encontrado el tema del Huh que comentaba Garrocha:
picturebox.getpixel(x, y).Huh
Aun no se muy bien lo que significa el matiz, y las explicaciones que encuentro son dificilillas, sabemos algo de este dato? seguramente que sea interesante, pero aun estoy muy verde, e igual que con lo de Ranganok necesito aprender un monton de cosas que ahora no se... el tema de las coordenadas esfericas me parece muy interesante, y seguramente sea la clave para hacer una buena seleccion de color, pero... soy un poco gañan
Furri, yo estoy usando un AMD Turion 64, el modelo del portatil es DV8000, de HP, es btte nuevo, asi que le meto mucha caña con esto, desde luego tengo la sensacion de que con el sistema que he programado... mi camara se queda muy corta al servirme 15 fotogramas por segundo, creo que podria meterle mucha mas caña, y conseguir un procesado en un muy buen tiempo, de todos modos, sigo leyendome la
herramienta que comentó Garrocha parece que es muy interesante, y nos puede dar mucho juego, es lo mas flexible que he visto hasta ahora, con ella, nos podremos olvidar de si trabajamos con una WebCam, o con una camara normal, asi que se aproxima mi compra de la Capturadora, y de la Cámara inalámbrica, pero como veis, las capturadoras por usb no son faciles, y como no taladre mi portatil para ponerle un pci... he de seguir buscando.
Por ultimo, quiero comentaros que este es mi ultimo mensaje desde la tierra de las pintas, la lluvia, y las rubias culonas, esta tarde a las 4 nos vamos para madrid, asi que ya estare listo para acabar mi tarribot, y continuar con este estupendo e interesante proyecto que tenemos entre manos.
Ángel.
Lo que queria decirte es que los colores los vas a tener que tratar como vectores de 3 componentes, por lo tanto la distacia entre dos colores (profundidad del color) va a ser:
Distancia = sqrt( (R2 - R1)^2 + (G2 - G1)^2 + (B2 - B1)^2 )
Lo malo de esta expresión es que se tarda mucho en calcular la raiz cuadrada (sqrt()), así que hay que optimizar el proceso, una forma de optimizar este proceso es utilizar coordenadas esféricas en la que la distancia ya va implicita (sin embargo hay que hacer la transformación al prinicpio).
Otra forma de optimización es la de utilizar otros espacios de color distintos al RGB (por ejemplo el HSI en la que los datos ya te dan "distancias" ).
S2
Ranganok Schahzaman
PD: Al final lo que vas a tener siempre son vectores de 3 coordenadas y calcular distancias entre 2 colores. Y lo mejor para eso es utilizar coordenadas esféricas.
Para que queda todo un poco más claro he hecho un dibujo (con el paint asi que no os espereis gran cosa).
Es el espacio de color de RGB, se ve en la posición (0,0,0) el negro cada eje uno de los colores "primarios" (Rojo, Verde o Azul), los demás vertices del cubo lo representan las sumas de los colores primarios (rojo + verde = amarillo, azul + verde = cyan, ..., rojo + verde + azul = blanco), entre el blanco y el negro he marcado la línea de los grises.
La distancia entre dos colores de representaria como una esfera de radio d con centro en el color que elegimos de referencia de esta forma la distancia entre azu (0,0,255)l y azul cielo (135, 206, 235) seria:
d = sqrt( (0-135)^2 + (0-206)^2 + (255-235)^2) = 247.1....
con lo cual todos los colores que tengan una distancia inferior a 247 con el azul (0,0,255) seran más "parecidos" que el azul cielo.
S2
Ranganok Schahzaman
Si, seria posible, y sin usar demasiado micro, porque podemos diferenciar los colores con la propiedad picturebox1.getpixel(x, y).R o .G o .B, de modo que podríamos desordenar la cadena en poco mas de 4 instrucciones, pero no le veo la utilidad... seguramente tu si, si puedes coméntame de que nos serviría, ya sabes que necesitamos muchas ideas.
Esto podría resultarnos útil para detectar zonas que tienen un determinado color. Imaginemos una pelota roja, en la parte superior es mas clara, pero en la parte inferior mas oscura debido a las luces, haciendo comparaciones RGB podríamos detectar la figura, es cierto que podrían detectar grises y negro, pero entonces podríamos hacer un cambalache matemático para eliminarlo en cierta medida, por ejemplo R - [(G + B)/2] y así podríamos saber si es algún gris. Es un poco pensar en voz alta pero... yo creo que puede ser útil.
Un saludo.
joviwap Para eso yo decia lo de trabajar con otros espacios de color, si puedes utilizar HSI lo de distinguir la pelota aunque esta esta más clara por encima y más oscura por debajo se puede hacer fácilemnte subiendo o bajando en el eje I ("iluminación") para un valor constantes de H (S varía de con I pero se puede calcular facilmente).
En el dibujo H corresponde al angulo de rotación, S a la distancia hasta la línea de grises y I la distancia vertical desde el negro.
S2
Ranganok Schahzaman
