• Kinect开发随笔①——红外扫描仪(Kinect 数据源)


    来源于 MVA 的 快速入门:Kinect for Windows v2 开发 的学习随笔

    具体内容为上图所示章节内容

    章节内全部代码:GitHub地址点我(链接失效,待补档)

    1 <Page
    2     <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    3         <Image Name="image" Width="512" Height="512"/>
    4         <Canvas Name="bodyCanves" Width="512" Height="512"/>
    5     </Grid>
    6 </Page>
    Xaml Code
      1 using WindowsPreview.Kinect;
      2 using Windows.UI.Xaml.Media.Imaging;
      3 using Windows.UI.Xaml.Shapes;
      4 using Windows.UI;
      5     
      6 public sealed partial class MainPage : Page
      7     {
      8         public MainPage()
      9         {
     10             this.InitializeComponent();
     11             this.Loaded += MainPage_Loaded;
     12         }
     13 
     14         KinectSensor sensor;
     15         InfraredFrameReader irReader;
     16         ushort[] irData;
     17         byte[] irDataConverted;
     18         WriteableBitmap irBitmap;
     19 
     20         Body[] bodies;
     21         MultiSourceFrameReader msfr;
     22 
     23         private void MainPage_Loaded(object sender, RoutedEventArgs e)
     24         {
     25             sensor = KinectSensor.GetDefault();
     26             irReader = sensor.InfraredFrameSource.OpenReader();
     27             FrameDescription fd = sensor.InfraredFrameSource.FrameDescription;
     28             irData = new ushort[fd.LengthInPixels];
     29             irDataConverted = new byte[fd.LengthInPixels * 4];
     30             irBitmap = new WriteableBitmap(fd.Width, fd.Height);
     31             image.Source = irBitmap;
     32 
     33             bodies = new Body[6];
     34             msfr = sensor.OpenMultiSourceFrameReader(FrameSourceTypes.Body | FrameSourceTypes.Infrared);
     35             msfr.MultiSourceFrameArrived += msfr_MultiSourceFrameArrived;
     36 
     37 
     38             sensor.Open();
     39             irReader.FrameArrived += irReader_frameArrived;
     40         }
     41 
     42         private void msfr_MultiSourceFrameArrived(MultiSourceFrameReader sender, MultiSourceFrameArrivedEventArgs args)
     43         {
     44             using (MultiSourceFrame msf = args.FrameReference.AcquireFrame())
     45             {
     46                 if (msf != null)
     47                 {
     48                     using (BodyFrame bodyFrame = msf.BodyFrameReference.AcquireFrame())
     49                     {
     50                         using (InfraredFrame irFrame = msf.InfraredFrameReference.AcquireFrame())
     51                         {
     52                             if (bodyFrame != null && irFrame != null)
     53                             {
     54                                 irFrame.CopyFrameDataToArray(irData);
     55                                 for (int i = 0; i < irData.Length; i++)
     56                                 {
     57                                     byte intensity = (byte)(irData[i] >> 8);
     58                                     irDataConverted[i * 4] = intensity;
     59                                     irDataConverted[i * 4 + 1] = intensity;
     60                                     irDataConverted[i * 4 + 2] = intensity;
     61                                     irDataConverted[i * 4 + 3] = 255;
     62                                 }
     63                                 irDataConverted.CopyTo(irBitmap.PixelBuffer);
     64                                 irBitmap.Invalidate();
     65 
     66                                 bodyFrame.GetAndRefreshBodyData(bodies);
     67                                 bodyCanves.Children.Clear();
     68                                 foreach(Body body in bodies)
     69                                 {
     70                                     if(body.IsTracked)
     71                                     {
     72                                         Joint headJoint = body.Joints[JointType.Head];
     73                                         if (headJoint.TrackingState == TrackingState.Tracked)
     74                                         {
     75                                             DepthSpacePoint dsp = sensor.CoordinateMapper.MapCameraPointToDepthSpace(headJoint.Position);
     76                                             Ellipse headcircle = new Ellipse() { Width = 50, Height = 50, Fill = new SolidColorBrush(Color.FromArgb(255, 255, 0, 0)) };
     77                                             bodyCanves.Children.Add(headcircle);
     78                                             Canvas.SetLeft(headcircle ,dsp.X - 25);
     79                                             Canvas.SetTop(headcircle ,dsp.Y - 25);
     80 
     81                                         }
     82                                     }
     83                                 }
     84 
     85                             }
     86                         }
     87                     }
     88                 }
     89             }
     90         }
     91 
     92         private void irReader_frameArrived(InfraredFrameReader sender, InfraredFrameArrivedEventArgs args)
     93         {
     94             using (InfraredFrame irFrame = args.FrameReference.AcquireFrame())
     95             {
     96                 if (irFrame != null)
     97                 {
     98                     irFrame.CopyFrameDataToArray(irData);
     99                     for (int i = 0; i < irData.Length; i++)
    100                     {
    101                         byte intensity = (byte)(irData[i] >> 8);
    102                         irDataConverted[i * 4] = intensity;
    103                         irDataConverted[i * 4 + 1] = intensity;
    104                         irDataConverted[i * 4 + 2] = intensity;
    105                         irDataConverted[i * 4 + 3] = 255;
    106                     }
    107                     irDataConverted.CopyTo(irBitmap.PixelBuffer);
    108                     irBitmap.Invalidate();
    109                 }
    110             }
    111         }
    112     }
  • 相关阅读:
    Linux文件/proc/net/tcp分析
    为什么系统调用会消耗较多资源
    为什么Linux默认页大小是4KB
    为什么Linux需要虚拟内存
    Make 命令教程
    关于同步的一点思考-下
    关于同步的一点思考-上
    Linux下的进程控制块(PCB)
    汇编语言基础:寄存器和系统调用
    内核栈与thread_info结构详解
  • 原文地址:https://www.cnblogs.com/4770k/p/6071535.html
Copyright © 2020-2023  润新知