前面十三篇文章介绍了Kinect SDK开发中的各个方面的最基础的知识。正如本系列博闻标题那样,这些知识只是Kinect for windows SDK开发的入门知识。本文将会介绍Kinect进阶开发需要了解一些知识(beyond the basic)。
读者可能会注意到,在学习了前面十三篇文章中关于Kinect开发的方方面面,如影像数据流、景深摄像机、骨骼追踪、麦克风阵列、语音识别等这些知识后,离开发出一些我们在网上看到的那些具有良好用户体验的Kinect应用程序还是显得捉襟见肘。Kinect SDK在某种意义上只是提供了一些其它Kinect类库的相同或者更好的功能。为了进一步提高Kinect for Windows应用程序的应用体验,我们需要了解一些其他的和Kinect有关的开发技术和类库。Kinect的真正应用潜力是和其他技术进行整合。
本文将会介绍一些第三方类库如何来帮助处理Kinect传感器提供的数据。使用不同的技术进行Kinect开发,可以发掘出Kinect应用的强大功能。另一方面如果不使用这些为了特定处理目的而开发的一些类库,而是自己实现这些逻辑的话,代码可能会比较混乱和不稳定。本文只是简单的介绍这些第三方类库并给以适当的引导。Kinect开发最大的困难不是什么技术,而是知道什么样技术能够被用到Kinect开发中。一旦了解了什么技术能够使用,Kinect可能开发的应用就会出现巨大的潜力。
本文中介绍的一些技术可能覆盖面不够广,有可能有些类库很重要但是本文没有涉及到,Kinect开发方面的技术变化的非常快,这一点也难以避免,欢迎大家能够补充。但是通过介绍一些基本的帮助类库,图像处理类库等,希望大家了解到这些技术的重要性以及对Kinect开发的作用。可能随着技术的发展,这些类库可能有些变化,但是相关的技术领域相信还是一样的,本文只是起到一个抛砖引玉的作用。
本文及下篇文章将会介绍几个有用的工具及类库,包括Coding4Fun Kinect Toolkit,Emgu(OpenCV计算机视觉库的C#版本)和Blender。只是非常简单的介绍了Unity 3D游戏框架,FAAST手势识别中间件以及Microsoft Robotics Developer Studio。这些知识如果大家感兴趣的话可能要花一定的精力去了解和掌握,这里只是简单介绍。
1. 影像处理帮助类
有很多影像处理相关的类库可以使用。单单在.NET Framework中,就有PresentationCore.dll中的System.Windows.Media.Drawing抽象类以及System.Drawing.dll中System.Drawing命名空间下的类可以使用。更复杂的是,在System.Windows和System.Drawing命名空间下有一些相互独立的处理形状(shape)和颜色(color)的类。有时候一个类库中的方法能够进行一些图像处理而其它类库中却没有类似的方法。为了方便,各种图形对象之间的转换显得很有必要。
当引入Kinect后,情况变得更加复杂。Kinect有自己的影像数据流,如ImageFrame。为了能够使Kinect这些专有的影像对象能够和WPF一同使用,ImageFrame对象必须转换为ImageSource类型,该对象在System.Windows.Media.Imaging命名空间中。第三方影像处理库并不知道System.Windows.Media命名空间中的对象,但是知道System.Drawing命名空间,为了能够使用Emgu处理Kinect中产生的数据,需要将Microsoft.Kinect中的某些数据类型转化为System.Drawing类型,然后将System.Drawing类型转换到Emgu中的类型,在Emgu中处理完之后,再转换回System.Drawing类型,最后再转换为System.Windows.Media类型来共WPF使用。
1.1 Coding4Fun Kinect工具类
Coding4Fun Kinect Toolkit为将一些类型从一种类库转换到其他类库中的对应类型的提供了一些便利。这个工具集可以从该开源工具集官网 http://c4fkinect.codeplex.com/ 上下载。它包括3个独立的dll。其中Coding4Fun.Kinect.Wpf.dll提供了一系列扩展方法来在Microsoft.Kinect和System.Windows.Media之间进行转换。而Coding4Fun.Kinect.WinForm.dll提供了一系列扩展方法来在Microsoft.Kinect和System.Drawing之间进行转换。System.Drawing是.NET图形库中的dll。他包含了WinForm中用来进行绘图和展现所需的元素,而WPF中所需要的展现元素包含在System.Windows.Media中。
遗憾的是Coding4Fun Kinect Toolkit并没有提供在System.Drawing命名空间和System.Windows.Media命名空间之间对应对象的转换方法。这是因为Toolkit的最初目的是方便简单的编写Kinect Demo程序而不是提供一个通用的在不同的图像类型之间进行转换的类库。所以,一些可能在WPF中要用到的方法可能存在于WinForm的dll中。一些非常有用的,复杂的处理景深数据流中景深影像数据的方法被封装到了一些简单的将Kinect图像类型转换为WPF ImageSource的对象中去了。
但是Coding4Fun Kinect ToolKit有两个比较好的地方可以取消上面的疑虑。一个就是,他是开源的,源代码可以下载并查看。可以通过源码查看Coding4Fun团队是如何在图像处理内部使用字节数组的。你可以在这些代码中看到前面博文中代码的影子,类库中的一些小的技巧非常有帮助。第二就是这些方法都是扩展方法,可以很方便的进行扩充。
扩展方法是一种语法糖,它使得一个独立的方法看起来像是被附加到一个类型上一样。比如,有一个方法AddOne可以将当前的值加1。这个方法可以改写为一个扩展方法。只需要简单的将该方法设置为静态的,并在Int32类型前加this即可。代码如下, 然后调用AddOne(3)这个方法可以简单的改写为3. AddOne()
public int AddOne(int i) { return i + 1; } public static class myExtensions { public static int AddOne(this int i) { return i + 1; } }
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索开发
, kinect
, 方法
, kinect2.0
, kinect2.0 win8.1
, kinect开发
, 类型
, kinect fusion
, system
, c# emgu stitch
, 异常kinect
, Emgu
, kinect,C#,输出坐标
一些
kinect开发入门、kinect unity开发入门、kinect开发入门二、kinect2.0开发入门、杨氏太极拳入门指引,以便于您获取更多的相关知识。