学习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>
【新机械楼537的Kinect编程学习基础篇(一)】最简单的通过kinect获取图像的代码
最新推荐文章于 2023-04-04 15:08:54 发布