我必须开发一个Windows应用程序,通过识别手势,通过networking摄像头控制鼠标。 我将使用vc ++ 2008进行开发。 但是我很困惑是否要使用.NET框架或核心的win32 APIs。 性能对于我的应用程序非常重要。 按照Ivor Horton的书“Beginning Visual C ++ 2008”,使用.NET框架有一个小的性能损失。 我想知道惩罚依赖的所有因素,为我的应用程序使用.NET框架将是可行的。
如果你熟悉Win32 API,那么去Win32 API。 这是你的情况的自然选择,因为你的大部分源代码将视频捕捉,图像处理,算法,并在Windows中的鼠标接口。 当您对性能感兴趣时,应尽量避免使用像.NET这样的厚层硬件。
我相信.NET是用于复杂的业务应用程序,而不是实时应用程序或设备驱动程序。
除非你是一个非常有经验的C ++程序员,否则C#是一种更高效的语言(作为拥有超过15年C ++经验和2年C#的人员)。
.Net库提供了比标准C ++库更易于使用的丰富的高质量功能。
所以,我会去使用.Net。
我还建议使用C ++ / CLI直接调用复杂的本地库,如果你必须整合它们,而不是P / Invoke。 这对于奇数调用是有好处的,但不能让您轻松访问数据结构或混合本机代码和托管代码。
.NET非常适合图形用户界面,也适用于非性能密集型领域的一般编程。 如果你需要做的不仅仅是一个简单的GUI,我会建议至少用.NET语言编写这个部分。
在你所描述的程序中,识别手势将是唯一的计算密集型部分。 控制鼠标的实际过程是微不足道的。 所以只要手势识别部分能够满足您的需求,程序的其他部分可能就不会成问题了。
第一步,你应该研究什么库是做手势识别或类似的图像处理。 (我希望你不打算从零开始编写这个部分)。如果你发现任何基于.NET的库声称性能足够满足你的需求,那么你可以试试看。 否则,你可能会得到一个基于C或C ++或类似的库。 无论哪种方式,有可能将这样的事情与基于.NET的程序集成在一起。
我认为你应该限制用于GUI构建的.NET使用。最后的作品尝试在Win32中完成。 关于对象识别的剩余问题,有称为OPENCV(开源计算机视觉库)的好库。 这个库包含了你在项目中需要的所有可能的方法。 还有英特尔的硬件专用库IPP,这可以提升Opencv的性能。
一个快速的方法来说:本地API和.Net之间的性能差异可以通过购买更昂贵的处理器来弥补。 你当然会花费1美元到100美元之间,10美元是一个合理的估计。 因此,如果您期望超过一百万用户,请选择本机API。 如果您希望在2-3个演示电脑上使用它,那真的不重要。