Usando la cámara del Kinect como cámara fotográfica.

Hola y bienvenidos a este primer tutorial de Kinect del 2014 está vez vamos a convertir nuestro Kinect en una cámara fotográfica.

  • Crea un nuevo proyecto en Visual Studio 2012 o 2010 de C# tipo Aplicación WPF con el nombre de tu preferencia.
  • Agrega la referencia Windows.Kinect.dll
  • En la ventana agrega los siguientes controles:

– Image: VideoControl

– Button Inicio: BtnBgn

– Button Guardar Imagen: BtnSave

– Button Detener: BtnStop

– Button Salir: BtnExit

*A todos los button agrega el evento Clic.

Ahora es tiempo de programar, nos vamos al MainWindows.xaml.cs

  • Agrega las siguientes librería:  Using Microsoft.Kinect;
  • Antes del MainWindows() agrega lo siguiente: private KinectSensor sensor;  private byte[] pixelData;

 

Una vez que tengamos todo listo es hora de iniciar con nuestro ejercicio.

  • Da clic en la ventana y agrega el evento Loaded y en el MainWindow agrega  this.Loaded += this.MainWindow_Loaded;
  • Y en el evento Loaded agregaremosKinectCam1
  1. Nos permitirá saber si hay uno o más sensores conectados a nuestro computador.
  2. Esta línea de código encuentra el objeto KinectSensor en la colección junto con su estatus, estatus que será asignado a la propiedad sensor.
  3. Iniciamos el Sensor
  4. Deshabilitamos el ColorStream [Obtiene la secuencia de colores para el Kinect.]
  5. Con esto, el control de su aplicación se traslada a la sensor_ColorFrameReady controlador de eventos donde el proceso marco de imagen tiene que ser hecho.
  6. Con este en caso de que no encuentre ningún sensor conectado al ordenador lanza un mensaje de notificación y cierra la ventana automáticamente.

Creación de Imagen

KinectCam2

  1. OpenColorImageFrame() que devuelve un marco de imagen del tipo ColorImageFrame. Ahora pudemos utilizar este mismo código exacto para trabajar marcos de imagen.
  2. Compruebaa si el marco entrante no es null.
  3. Obtiene los datos de los píxeles en la matriz/arreglo de bytes.
  4. Copia los datos de píxeles.
  5. Calcular la stride.
  6. Asignamos el mapa de bits en VideoControl image. Utilizando las dimensiones del image y utilizando el PixelFormats Bgr32 que es el formato del pixel de 32 bits por pixel.Cada canal de color (azul, verde y rojo) se le asignan 8 bits por píxel (BPP).

Inclusive nosotros podemos jugar con esta parte es decir si cambiamos de Bgr32 a Cmyk32 obtendríamos los siguientes resultados. Dentro de las opciones que te da PixelFormats puedes escoger la que más te guste y tomar las fotografías que quieras y divertirte un buen rato con tu aplicación.

Hasta aquí ya tenemos lo principal, si corremos nuestra aplicación en este momento obtendremos lo siguientes resultados.

KinectCam4

Eventos Clic

Antes de encender y/o apagar el dispositivo hay que cerciorarse de que esté conectado y que nos indique si es posible interactuar con el sensor y para ello agregamos en todos los eventos lo siguiente.

if (this.sensor != null && !this.sensor.IsRunning)

Encender/Iniciar el sensor.

this.sensor.Start();

Detener el sensor.

this.sensor.Stop();

Para salir de la ventana primero detenemos el sensor y después ahora si cerramos la ventana.

this.sensor.Stop();

this.Close();

Guardar imagen.

Para ser un poco más ordenados y que no se vea el código todo amontonado crearemos un método llamado SaveImage donde nos permitirá guardar las imágenes.

KinectCam3

  1. Como es un ejemplo simple le daremos un nombre estático a nuestra imagen a guardar en mi caso será: “Mi primer foto con Kinect.jpg” y de daré el formato de .jpg
  2. Para verificar que no marque error al guardar la segunda imagen y se me detenga la aplicación le estoy diciendo que si encuentra una imagen con el mismo nombre sobre escriba o elimine para sustituirla por la nueva.
  3. Aquí es donde guardamos la imagen, creamos un FileStream con el nombre de la imagen y le decimos que el contenido de la imagen es la que contiene nuestra image, en mi caso la guardare en formato .jpg y es por eso que utilizo JpegBitmapEncoder para definir un codificador que se usa para codificar imágenes a ese formato y finalmente la guardo.

Y ya terminamos ahora si podemos correr nuestra aplicación y al guardar una imagen nos dará el siguiente resultado.

*Las dimensiones de la imagen resultante son de 640 x 480.

*La imagen se guardará en la carpeta del paquete de la aplicación en la carpeta  Bin > Debug.

KinectCam5

 Vídeo Tutorial

https://www.youtube.com/watch?v=NCG-wm04mJ8&feature=youtu.be

~ Hasta la próxima🙂 ~ 

Un comentario sobre “Usando la cámara del Kinect como cámara fotográfica.

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