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

 学习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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值