Buenas,
hoy toca modificar un poco el código de la aplicación que muestra el contenido de la cámara web de Kinect para mostrar en este caso, la imagen procesada del Depth Sensor de Kinect en una aplicación WPF. La imagen que nos entrega el Depth Sensor es el resultado del proceso de la información que retorna el sensor infrarojo que posee Kinect junto con la imagen de la cámara de Kinect. Con estos 2 elementos (y un par de cosillas más) Kinect consigue armar un modelo con cierta profundidad que es el que nos entrega el Depth Sensor.
La gran diferencia con el post anterior es que en este caso trabajaremos con el evento DepthFrameReady() (línea 42) que es el que nos entregará la imagen procesada del DepthSensor. A partir de este momento, trabajamos con una clase externa DepthImageHelper() para procesar la imagen del sensor en un formato compatible con un IMAGE.
1: namespace ElBruno.KinectViewer
2: {
3: using System.Windows;
4: using Microsoft.Research.Kinect.Nui;
5:
6: /// <summary>
7: /// Interaction logic for MainWindow.xaml
8: /// </summary>
9: public partial class MainWindow
10: {
11: private Runtime kinect;
12: private InteropBitmapHelper imageHelper;
13: private RuntimeOptions RuntimeOptions { get; set; }
14:
15: public MainWindow()
16: {
17: InitializeComponent();
18: Loaded += MainWindowLoaded;
19: }
20:
21: void MainWindowLoaded(object sender, RoutedEventArgs e)
22: {
23: InitKinect();
24: }
25:
26: void InitKinect()
27: {
28: if (Runtime.Kinects.Count == 0)
29: return;
30: kinect = Runtime.Kinects[0];
31: RuntimeOptions = RuntimeOptions.UseDepthAndPlayerIndex |
32: RuntimeOptions.UseSkeletalTracking |
33: RuntimeOptions.UseColor;
34: kinect.Initialize(RuntimeOptions);
35: kinect.DepthStream.Open(ImageStreamType.Depth, 2, ImageResolution.Resolution320x240,
36: RuntimeOptions.HasFlag(RuntimeOptions.UseDepthAndPlayerIndex) ||
37: RuntimeOptions.HasFlag(RuntimeOptions.UseSkeletalTracking) ?
38: ImageType.DepthAndPlayerIndex : ImageType.Depth);
39: kinect.DepthFrameReady += this.KinectDepthFrameReady;
40: }
41:
42: void KinectDepthFrameReady(object sender, ImageFrameReadyEventArgs e)
43: {
44: var planarImage = e.ImageFrame.Image;
45: var depthImageHelper = new DepthImageHelper();
46: byte[] convertedDepthBits = depthImageHelper.ConvertDepthFrame(planarImage.Bits, RuntimeOptions);
47:
48: if (this.imageHelper == null)
49: {
50: this.imageHelper = new InteropBitmapHelper(planarImage.Width, planarImage.Height, convertedDepthBits);
51: this.DepthSensorViewer.Source = this.imageHelper.InteropBitmap;
52: }
53: else
54: {
55: this.imageHelper.UpdateBits(convertedDepthBits);
56: }
57: }
58: }
59: }
Si ejecutamos la aplicación podremos ver el resultado del DepthSensor similar a la siguiente imagen.
El código del ejemplo lo pueden descargar desde
Saludos @ Here
El Bruno

Leave a reply to [#KINECT] Recopilatorio de enlaces con #KinectSDK (I) – El Bruno Cancel reply