【新机械楼537的Kinect编程学习基础篇(一)】最简单的通过kinect获取图像的代码

来源:互联网 发布:datatype json 编辑:程序博客网 时间:2024/05/16 10:15

 学习kinect开发是我研究生阶段的重要组成部分,作为一个编程菜鸟,以前没有任何经验,第一步肯定是需要对其他人的代码加以模仿。老师告诉我,要带着任务学习。既然不是计算机相关专业的同学,显然缺乏理解所有代码的能力,也不太可能做到每一行代码都知道怎么来的,更不太可能完全靠自己写出需要的程序。但是带着任务去做,知道自己要做出什么,通过各种学习资料来扩展自己的知识面,有目的地去做每一步,可能是完成一项工程最好的方法。

    我阅读的材料来自于网络和以下两本kinect开发教材:

   《KINECT人机交互开发实战》人民邮电出版社

   《KINECT应用开发实战——用最自然的方式与机器对话》机械工业出版社

    在敲代码的过程中,我发现:第一代码是有错误的。第二为了简便,书上通常不会印上所有的代码。这就导致初学者的困惑和不解,由于做这个的人也不太多,无处去询问的可能性大增。

    当遇见书上代码出错和有问题的时候,我会尽量上网找到类似的程序,争取做一下移植。当我自己的力量不够的时候,我会求助于实验室的大博士同学。为了让更多的kinect开发者受益,我决定每次成功之后,贴上在大家的共同努力下敲出的0错误0警告并且可以实现功能的代码。希望对和我一样菜鸟的初学者有帮助。

    下面我就贴上来第一次运行的程序——通过kinect获取RGB图像。

using System;
using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using Microsoft.Kinect;namespace KinectColorViewer{    /// <summary>    /// MainWindow.xaml 的交互逻辑    /// </summary>    public partial class MainWindow : Window    {        KinectSensor kinectSensor;        private byte[] pixelData;//        public MainWindow()  //  {  //      InitializeComponent();  //  }          private void Window_Loaded(object sender, RoutedEventArgs e)        {//在loaded事件的处理函数中添加kinectsensor对象的初始化代码            kinectSensor = (from sensor in KinectSensor.KinectSensors                            where sensor.Status == KinectStatus.Connected                            select sensor).FirstOrDefault();            kinectSensor.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);            kinectSensor.Start();            kinectSensor.ColorFrameReady += kinectSensor_ColorFrameReady;        }        private void Window_Closed(object sender, EventArgs e)        {            kinectSensor.Stop();        }    private void kinectSensor_ColorFrameReady(object sender,ColorImageFrameReadyEventArgs e)    {      using (ColorImageFrame imageFrame = e.OpenColorImageFrame())       {if (imageFrame !=null)          {               this.pixelData = new byte[imageFrame.PixelDataLength];               imageFrame.CopyPixelDataTo(this.pixelData);               this.ColorImage.Source = BitmapSource.Create(imageFrame.Width,imageFrame.Height,96,96,PixelFormats.Bgr32,null,pixelData,imageFrame.Width * imageFrame.BytesPerPixel);           }       }    }  }}

     

   以下是.xaml文件中的代码。

<Window x:Class="KinectColorViewer.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        Title="MainWindow" Loaded="Window_Loaded" Closed="Window_Closed">    <Grid>        <Image HorizontalAlignment="Left"               Name="ColorImage" Stretch="Fill" VerticalAlignment="Top" />    </Grid></Window>

0 0
原创粉丝点击