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
Hola,
Hay un error en el código en la línea:
for(x = 0; x<ImgOriginal>= Rojo - Tolerancia) //Si hay más azul que rojo sigue
Deberia poner:
for(x = 0; x < ImgOriginal ; x ++)
if( Azul >= Rojo - Tolerancia) //Si hay más azul que rojo sigue
Lo he intetado editar, pero no me deja
Independientemente de esto el problema Mif esta en como se define la distancia. En el código del tutorial tú lo haces de la forma siguiente (B= Azul, R = rojo, G = verde):
d = B - max(R, G)
y luego : d > tolerancia
(es otra forma de escribir lo mismo pero empleando el sistema de distancias).
Se puede probar otras distancias:
d = sqrt( (255-B)^2 + R^2 + G^2) ; // Esto sería la distancia euclidea con azul puro.
d = (255-B) + R + G; //Comparamos mejor con un valor conocido (Azul puro).
d = raizcubica((255-B)^3 + (-R)^3 + (-G)^3);
d = max((255-B), R, G);
...
luego solo tenemos que aplicar d> tolerancia y punto.
S2
Ranganok Schahzaman
Muy bueno Ranganok, en cuanto termine con los servos me pongo con ello de nuevo.
De momento yo estoy bloqueado, porque intento emplear el TMR0 para no gastar tiempo de ejecución en el micro, pero no resulta nada facil cuando trabajas con dos servos... teneis alguna idea de como hacerlo? o algun programa de ejemplo en asm, basic o C?
MCD (maximo comun divisor) aunque te sirve cualquier divisor de los dos tiempos.
Imaginemos que quieres activar el servo 1 durante 25ms y el servo 2 durante 15 ms
En el TMR0 pones a contar un tiempo de 5ms activas los dos servos y a las 3 interrupciones desactivas el servo 2 y a las 5 el servo 1.
Como en principio no sabes cuanto tiempo tiene que estar activado un servo (la señal) tienes que definir un paso minimo y un tiempo maximo de trabajo.
S2
Ranganok Schahzaman
Ok, de modo que mi línea de investigación se tiene que centrar en crear un MCD para los servos, el problema es elegir el tiempo de MCD, porque la señal de un Futaba es algo asi:
0.9ms en alto = 0º
1.5ms en alto = 90º
2.1ms en alto = 180º
Frecuencia de la señal 50Hz
Así que lo unico que se me ocurre es un MCD de 100us, pero eso es una interrupción cada 100 instrucciones, no se que tal quedaría... puede que matando unos cuantos grados y perdiendo algo de resolucion pueda hacer un MCD de 200us.
Voy a investigarlo.
Muchas gracias por la idea, a ver si consigo algo
Prueba con 150us o 300us pierdes resolución pero reduces el numero de interrupciones.
S2
Ranganok Schahzaman
