Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola gente estoy realizando un pequeño proyecto para detectar movimiento con una webcam. No es nada novedoso pero es algo que llama mi curiosidad. Hasta ahora he podido con visual basic obtener la imagen de la webcam y guardarla cada 2 segundos con un timer.
Ahora quiero hacer el siguiente paso, comparar la foto anterior con la actual. Supongo que se compara bit a bit, aunque sería demasiado sensible ante variaciones del exterior como sombras. Buscando por internet he visto que se tiene que capturar las matrices roja,verde y azul de los pixeles de la imagen. Alguien sabe que función utilizar en vb para capturar dichas matrices? O se utiliza otro metodo?
Gracias
Muy buenas, si quieres hacerlo desde cero usando VB, adelante. Pero te sugiero que pruebes alguna librería como OpenCV, que ya trae rutinas para estas cosas, así te será más fácil ir incorporando nuevas funcionalidades.
Aquí un ejemplo hecho con VB usando las funciones de OpenCV:
https://www.youtube.com/watch?v=2ZbDbbkp51I
¡Suerte!
Yo empecé con VB en mi primer proyecto de visión artificial, es muy divertido sobre todo cuando tu mismo te encargas de programar los algoritmos de comparación, filtrado, calculo de centroides, etc... asi aprendes muchísimo.
Cuando necesitas algo mas de velocidad (te aseguro que lo necesitarás en poco tiempo) visual basic se te quedará lento y tendrás que migrar a C++.
En cuanto a librerias, nunca he trabajado con OpenCV pero casi todo el mundo habla bien de ella asi que mala no va a ser...
como ha dicho FJ_Sanchez... suerte...
furri.
Perdonad mi ignorancia pero Open CV es una libreria de c++ o otro tipo de codigo? Hasta ahora lo que he conseguido es conectar una webcam al pc con el usb y que se vayan guardando imagenes cada 5 segundos en la unidad C. Dices que el c++ es mas rapido...un pic tiene suficiente aguante para este tipos de programas (en un futuro no muy lejano,espero, quiero hacer un rastreador con una webcam) ?
Otra duda que tengo es si con una webcam se pueden detectar obstaculos ya que captando tan solo una imagen no puedes saber si se trata de una mesa o de un dibujo pintado en la paret..tampoco se puede determinar la distancia que se encuentra dicho obstaculo. Supongo que se tiene que complementar con otros sensores no?
Perdonad mi ignorancia pero Open CV es una libreria de c++ o otro tipo de codigo? Hasta ahora lo que he conseguido es conectar una webcam al pc con el usb y que se vayan guardando imagenes cada 5 segundos en la unidad C. Dices que el c++ es mas rapido...un pic tiene suficiente aguante para este tipos de programas (en un futuro no muy lejano,espero, quiero hacer un rastreador con una webcam) ?
Otra duda que tengo es si con una webcam se pueden detectar obstaculos ya que captando tan solo una imagen no puedes saber si se trata de una mesa o de un dibujo pintado en la paret..tampoco se puede determinar la distancia que se encuentra dicho obstaculo. Supongo que se tiene que complementar con otros sensores no?
Buenas, OpenCV es para C/C++, pero como ya te he comentado existen bindings/wrappers para poder usarlo con otros lenguajes:
Wrapper para .NET (VisualBasic, C#, VC++, IronPython, etc.): http://www.emgu.com/wiki/index.php/Main_Page " onclick="window.open(this.href);return false;
Wrapper para Python: http://opencv.willowgarage.com/wiki/PythonInterface " onclick="window.open(this.href);return false;
Gema para ruby: http://rubyforge.org/projects/opencv/ " onclick="window.open(this.href);return false;
Port para usarlo con processing: Java: http://ubaa.net/shared/processing/opencv/
Como verás, hay muchas opciones, ya que se trata de una librería muy popular y optimizada para arquitecturas de Intel. Cuando preguntas que si un PIC tiene suficiente aguante... supongo que quizás un PIC32 pueda usarse para estos menesteres, pero desde luego no creo que haya un port de OpenCV para PIC32 y tampoco un compilador de C++ para el mismo.
Lo de la distancia si que puede hacerse una estimación si previamente se ha identificado el objeto y se le ha asociado unas medidas. Por ejemplo, primero detectas el objeto y calibras tu aplicación para que esa imagen se corresponda con una distancia, posteriormente se busca ese patrón y según lo transformado que esté podrás estimar la distancia. Puede ser algo complicado, pero creo que funcionaría.