Kinect入门(1)——显示彩色图像数据流
2015-09-14 14:55
567 查看
进行本节的前提是已配置好Kinect的开发环境。
废话不多说,直接进入正题!
Kinect+VS2012显示彩色图像数据流
1、新建C# WPF应用程序,项目名随便写即可。
2、在解决方案“….”里右击“引用”—>添加引用,
然后在”搜索程序集”那里搜索”Microsoft.Kinect”,然后添加即可。
3、在WPF里添加必要的属性和元素.
<Window x:Class="ColorView.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="500" Width="650" Loaded="Window_Loaded_1" Closed="Window_Closed_1"> <Grid> <!--创建一个画布--> <Canvas Name="CanvasWindow" Height="480" Width="640"> <Image Name="ColorName" Height="480" Width="640"/> </Canvas> </Grid> </Window>
其中后两组Height、Width属性最好与图像的高和宽对应成比例;“
Loaded”和Closed“”属性在源码中会对应生成相应的函数(见下文源码),可根据提示按“Tab”键添加;
“ColorName”是我们要显示彩色图像的元素的名字,源码中会用到;
“CanvasWindow”在本篇中暂时用不到,所以随便写或者不用添加也行。
4、源码解读
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; 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; //*****************************************添加Kinect引用******************************** using Microsoft.Kinect; namespace ColorView { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } //********************************私有属性**************************** private KinectSensor kinectSensor;//Kinect传感器对象 private byte[] colorPixelData;//存储彩色数据流中的像素数据 //******************************加载窗口函数************************** //该函数就是在WPF中添加"Loaded"时自动添加的函数 private void Window_Loaded_1(object sender, RoutedEventArgs e) { //1、Kinect传感器初始化 kinectSensor = KinectSensor.KinectSensors[0]; //2、彩色数据流初始化 kinectSensor.ColorStream.Enable(ColorImageFormat.RgbResolution1280x960Fps12); //3、注册彩色数据流事件 kinectSensor.ColorFrameReady += kinectSensor_ColorFrameReady; //4、启动Kinect kinectSensor.Start(); } //****************************彩色数据流处理事件********************** private void kinectSensor_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e) { using (ColorImageFrame colorImageFrame = e.OpenColorImageFrame()) { if (colorImageFrame != null) { //1、用来存储彩色像素的数组(BGRA BGRA BGRA BGRA BGRA) colorPixelData = new byte[colorImageFrame.PixelDataLength]; //2、把彩色数据帧中的彩色像素复制到:colorPixelData colorImageFrame.CopyPixelDataTo(colorPixelData); //3、将彩色像素数据赋给画布上Name=ColorName的Image元素 ColorName.Source = BitmapSource.Create(colorImageFrame.Width, colorImageFrame.Height, 96, 96, PixelFormats.Bgr32, null, colorPixelData, colorImageFrame.Width * 4); } } } //*****************************关闭窗口函数*************************** //该函数就是在WPF中添加"Closed"时自动添加的函数 private void Window_Closed_1(object sender, EventArgs e) { //当准备关闭Kinect时,检查Kinect是否仍处于链接状态, if (kinectSensor != null && kinectSensor.Status == KinectStatus.Connected) kinectSensor.Stop(); } } }
运行结果如下图:
如果按以上步骤操作的话,上述代码直接复制过去应该可以直接运行
相关文章推荐
- Volley框架 xUtils 框架
- 在Xcode下编译cocos2d-x语言为lua时出错的解决方案
- Android 网络通信框架Volley
- Android Intent.FLAG_NEW_TASK详解,包括其他的标记的一些解释
- 【SSH系列】——手动搭建SSH环境
- oracle锁表进程查看并强制关闭
- linux fcntl()函数
- json 除去转义字符以及查看json错误
- iOS学习笔记:UITableView想要的都有
- ASPx组件访问模板中的控件
- Web前端知识技能大汇总
- SWOT分析是神马?
- Visio使用技巧—框图多输入的实现
- zabbix之日志文件监控
- Android onKeyDown 再按一次退出
- HDU 3371 Connect the Cities
- IMX6Q(TQIMX6Q/TQE9)移植笔记
- 开发中用到的视频存储
- android和Vitamio使用比较
- [LeetCode] Zigzag Conversion