Usando una WebCam con Windows Form | Parte 1: Captura


Uno de los programas que a las personas les gusta aprender a hacer es el de controlar una cámara web mediante .NET Framework. En este artículo utilizaremos las librerías que están incluidas en el Framework de Aforge.NET para hacer un programa que interactúe con nuestra cámara web.

Primero se debe aclarar que este Framework no funciona con .NET Framework 4.0, por eso debemos cambiar el Framework de Destino: Explorador de Soluciones –> Propiedades del Proyecto (Alt + Entrar) –> Aplicación.

Ahora comencemos con nuestro Form, utilizaremos 2 PictureBox (1 para mostrar la WebCam y otro para hacer una Captura), 3 Botones (1 Para Iniciar la WebCam, otro para capturar una imagen y otro para guardar la imagen capturada) y un ComboBox (mostrará los diferentes dispositivos de video). Nos debe quedar algo como:

Referenciamos las librerías Aforge.Video y Aforge.Video.DirectShow.

private bool ExistenDispositivos = false;
private FilterInfoCollection DispositivosDeVideo;
private VideoCaptureDevice FuenteDeVideo = null;

Las líneas de código anterior declaran 3 variables que nos permitirá conectarnos a nuestra cámara de video.

Sigamos:

#region WebCam
public void CargarDispositivos ( )
{
    for ( int i = 0 ; i < DispositivosDeVideo.Count ; i++ )
        dispositivos.Items.Add ( DispositivosDeVideo[i].Name.ToString () );
    dispositivos.Text = dispositivos.Items[0].ToString ();
}

public void BuscarDispositivos ()
{
    DispositivosDeVideo = new FilterInfoCollection ( FilterCategory.VideoInputDevice );
    if ( DispositivosDeVideo.Count == 0 )
        ExistenDispositivos = false;
    else
    {
        ExistenDispositivos = true;
        CargarDispositivos ( );
        iniciar.Enabled = true;
    }
}

public void TerminarFuenteDeVideo ()
{
    if ( !( FuenteDeVideo == null ) )
    if ( FuenteDeVideo.IsRunning )
    {
        FuenteDeVideo.SignalToStop ();
        FuenteDeVideo = null;
    }
}

private void video_NuevoFrame ( object sender, NewFrameEventArgs eventArgs )
{
    Bitmap Imagen = ( Bitmap )eventArgs.Frame.Clone ();
    webcam.Image = Imagen;
}
#endregion

Esta región de código es la encargada para buscar los dispositivos de video y luego cargar los nombres al ComboBox. Los otros 2 métodos sirven para detener la Fuente de Video (TerminarFuenteDeVideo) y el otro nos actualizará la imagen del PictureBox usando las imágenes que consigue desde la cámara de video (video_NuevoFrame).

Eso sería el código más importante en este programa, solo haría falta añadir lo que hace el botón Iniciar:

FuenteDeVideo = new VideoCaptureDevice ( DispositivosDeVideo[dispositivos.SelectedIndex].MonikerString );
FuenteDeVideo.NewFrame += new NewFrameEventHandler ( video_NuevoFrame );
FuenteDeVideo.Start ();

Esta parte del código selecciona el dispositivo de video el cual ha sido escogido del ComboBox, se le agrega el evento NewFrame que antes vimos en la región WebCam.

Se puede encontrar más información con respecto al espacio de nombres Aforge.Video y Aforge.Video.DirectShow en http://www.aforgenet.com/framework/docs/.

Al final nos debe quedar un programa corriendo de esta forma:

La parte visual se puede mejorar. Teniendo esto como base podemos agregar Filtros usando Aforge.Imaging.Filters o grabar un video usando el espacio de nombres AForge.Video.VFW.

Como siempre, les dejo el proyecto creado por mí; esta vez he dejo una versión en C# (WebCamWF-Csharp.zip) y otra en VB.NET (WebCamWF-VB.NET.zip) para mayor conveniencia, se debe cambiar la extensión de .odt a .zip.

Anuncios

38 Respuestas a “Usando una WebCam con Windows Form | Parte 1: Captura

  1. Excelente!!!, me sirvió mucho, pero, ¿Como ajusto la imagen al PictureBox?

    Saludos.

    • Hola Marcos
      Que bien que te haya servido. Con respecto a tu inquietud debes usar la propiedad SizeMode del PictureBox, si pones StretchImage la imagen ocupará todo el PictureBox aunque no se ajustará uniformemente.

      Saludos

  2. Muchisimas gracias!!! Muy facil de utilizar!! gracias por tu aporte

  3. Hola, el fichero en vb no está disponible. podrías por favor colocarlo nuevamente.

    Gracias!!

  4. Hola!!
    Me funciona al 100%, muy buen aporte, muchas gracias!!

    soy nuevo en el mundo de c# .net, y solo tengo una duda, crees que se pueda insertar un marco a la imagen antes de poderla guardar?

  5. Hola Gracias por el Aporte
    Si funciono a la perfeccion

  6. no he podido descargar el ejemplo en c# puedes chekar tu link

  7. Arnold A. Calvillo Calderon

    Hola que tal Antonio, no se encuentra disponible ninguno de los 2 archivos :S.

    • Hola Arnold
      No se qué esta pasando, últimamente los archivos pasan de disponible a no disponible en cuestión de minutos/horas… intenta mas tarde y verás que ya los podrás descargar.
      Un saludo

  8. Hola, por favor podrían arreglar la descarga de la versión de VBnet, no consigo descargarla. Gracias

  9. Por favor si pueden arreglar los enlaces os lo agradecería mucho :S

  10. O si pudieran subirlo a algún sitio de descarga directa como Megaupload o algo parecido.. 😀

  11. Ya me funciona! 😀
    Muchísimas gracias y disculpas por tanto comentario…

  12. Hola amigo, he encontrado en tu blog informacion muy util e interesante sobre la libreria Aforge.Net, sin embargo he estado intentando detectar movimiento con dicha libreria en vb.net y no he tenido exito, estoy convirtiendo el ejemplo MotionDetector a vb.net y me sale el siguiente error despues de seleccionar la camara para que la active: Video source is not specified. Me gustaria que me pudieras ayudar con esto facilitando algun ejemplo o indicandome a que se debe el error, gracias de antemano y felicitaciones por tu blog, esta muy bueno…

  13. Mil Gracias! Antonio..

  14. un excelente aporte para los novatos en C# gracias me sirvió muchisimon!!! yo tengo la parte de como guardarlo en una base de datos =)

  15. Muy bueno, gracias. Alguien tiene algo similar, pero que detecte los monitores que se tienen conectados y donde por medio de un boton enviar form que se desee a x monitor. gracias por su ayuda. Luis Ruano.

  16. Alguien tiene el Codigo en C#, por favor que me ayude,. Gracias

  17. Hola, oye excelente tutorial, me ah servido mucho, solo tengo una duda
    en tu función “video_NuevoFrame” veo que mandas a llamar a “webcam”
    de dónde obtienes esa ¿’variable’? ?

  18. Olvidalo, creo que ya entendí, es el nombre de tu imageBox.
    Saludos, de todas maneras gracias

  19. buenas hermano, estoy realizando un proyecto de proceso de inscripcion para un colegio estoy interesado en los link que dejaste que no puedo abrir, como los puedo conseguir?

  20. Hola buenos días…

    acabas de explicar en pocas palabras lo que llevo buscando hace tiempo.
    Verás, estoy usando una capturadora de video AOP-108 8CH BT878 (http://aopvision.en.ec21.com/offer_detail.jsp?offer_id=OF0000891485&offer_nm=8_Channel_Real_Time_DVR_Card_AOP-108_) para capturar en tiempo real la imagen de 4 cámaras de video que voy a usar en una auditorio donde se impartiran charlas dirigidas a la comunidad sorda, lenguaje exclusivamente visual, por lo que preciso visualizar las 4 cámaras y luego seleccionando cualquiera de ellas enviar la imagen a un cañon para proyectarla en una pantalla gigante.

    El caso es que veo que se puede hacer, pero no consigo conectar con la capturadora y todos los ejemplos donde pone que es posible se centran en webcams.

    ¿Sabes si con Aforge.NET es posible hacer lo que te comento usando la capturadora? He utilizado alguna demo comercial y recoge la imagen de las cámaras sin problema, pero necesito personalizarlo a nuestras necesidades, por eso intento programar yo mismo en Visual Basic .NET.

    Agradecería muchísimo cualquier ayuda que me puedan facilitar para conseguir hacer lo que necesito. Entre otras cosas: conectar con la capturadora, identificar todas las entradas, seleccionar la correspondiente a cada cámara, visualizar un cuadrante en pantallas con todas las cámaras en tiempo real, etc.

    Muchas gracias por tus aportes. Su sencillez ayudan sobremanera a gente que, como yo, no se dedica a esto pero le apasiona el mundo de la programación.

    Un saludo

  21. Exelente tutorial pero quiero capturar una foto que se esta mostrando en la webcam pero no se como llamar a la función me podrias ayudar por favor

    saludos

  22. Muy buenas, antes de nada gracias por el aporte pero he intentado descargar el proyecto en VB.NET pero no puedo. He intendado usar la herramienta de conversión pero tengo algunos problemillas. Gracias

  23. Hey como estas gracias po el tutorial me sirvio de maravilla ahora quisiera saber si es posible utilizar otros perisfericos del pc en mi caso una pistola de codigo de barras para desarrollar un software de venta de ropa

  24. oye ami me marca un error! en el boton iniciar :S!.. >>FuenteDeVideo = new VideoCaptureDevice (DispositivosDeVideo[dispositivos.SelectedIndex].MonikerString);<< … Referencia a objeto no establecida como instancia de un objeto.

  25. ya lo solucione, pero como hago para tomar la foto?!

  26. hola el link (WebCamWF-VB.NET.zip) me baja para un archivo odt de lo cual no me deja ver su contenido. por favor si me puedes mandar el archivo
    gracias

  27. Hola muy buen ejemplo,pero me podrias decir como guardo las fotos en una base de datos y que me muestre registro por registro con los botones de navegacion en vb 2010.muchas gracias

  28. Ya lo he probado y funciona de maravilla. Para los que no lo han logrado descargar, lo he resubido a 4shared para el que los necesite, claro si no se opone awolfy, de ser asi los quitare de inmediato.

    http://www.4shared.com/zip/sODrVXFQ/webcamwf-csharp.html
    http://www.4shared.com/zip/ZsDEPbZO/webcamwf-vb-net.html

    Saludos.

  29. Muchas gracias por tu trabajo esta muy bueno, lo que quisiera saber cómo puedo guardar en formato de video desde el momento que inicia el uso de la webcam espero me entiendas. gracias de nuevo

  30. Genial!!! muchas gracias por este tutorial y por dedicar tu tiempo.

  31. no sirven los links de vb y c3# te lo agradeceria si los arrglas

  32. Alguien sabe como configurar para que la cámara tenga mas brillo?

  33. Como puedo hacer para guardar la foto en una base de datos mysql? Muchas gracias

  34. Cuántas webcams soporta?, le estoy conectando 4 y solo me jala 3?…, gracias.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s