我正在开发一个应用程序来处理由Point Grey相机(http://www.ptgrey.com/)实时捕获的图像。 Point Grey SDK是一个.net包装器,可以是32位或64位。
然后为了处理捕获的图像,我正在使用一个名为Emgu CV(http://www.emgu.com/)的openCV包装器,它也有32位或64位版本。
现在,在Vista64上,我选择64位版本的FlyCapture(Point Grey的SDK)和Emgu CV(其中包括openCV),希望能够最大限度地提高性能。
最近我一直想从XNA调用我的FlyCapture + Emgu DLL代码,不幸的是只存在于32位,我意识到我可能不得不重新安装32位的所有组件,因为我真的不想去通过IPC,远程处理等。
除了对32位固有的内存空间的明显限制之外,我还应该期待性能损失吗?这有多么戏剧化,为什么?
提前感谢任何建议或解释。
答案 0 :(得分:6)
经过大量测试后,发现 x86 openCV + emgu组合在测试中使用14种不同的典型openCV方法执行的测试比x64 慢1.408倍(平滑,图像复制,图像格式转换等。)
答案 1 :(得分:1)
试一试,看看!
我可以想出为什么它可以采用任何一种方式(不是非常熟悉您正在使用的软件)。
你的指针在32位进程中是一半大,因此可以减少内存压力。 32位软件已经存在更长时间,可能已经更好地进行了优化。但是,另一方面,图像处理往往对64位进程提供的较大寄存器大小反应良好。
我怀疑表演将在同一个球场,可能是正负20%。但你永远不能确定。如果你得到数量级的类型差异,那我就会担心。
答案 2 :(得分:1)
我们有一个simimair情况(PT Gray相机和我们的C#应用程序的emgu openCV包装器)。
发现emgu在x64下甚至更快(win 7与win XP x86相比)。首先,我认为x64在我的应用程序的其余部分上速度较慢,但那是在调试模式下。在发布模式下,性能可比。看起来VS2010(x64)下的调试版本比VS2008版本(x86)慢。