使用 64 位版本的 openCV+Emgu 而不是 32 位有性能优势吗?

Posted

技术标签:

【中文标题】使用 64 位版本的 openCV+Emgu 而不是 32 位有性能优势吗?【英文标题】:Is there a performance advantage in using a 64bit version of openCV+Emgu instead of 32bit? 【发布时间】:2011-02-28 07:47:28 【问题描述】:

我正在开发一个应用程序来处理点灰色相机 (http://www.ptgrey.com/) 实时捕获的图像。 Point Gray 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 位固有的内存空间明显限制之外,我还应该期待性能损失吗?这会有多戏剧性,为什么?

提前感谢您的任何建议或解释。

【问题讨论】:

【参考方案1】:

经过大量测试,事实证明 x86 openCV + emgu 组合 在使用 14 种不同典型 openCV 方法的序列的测试中比 x64 慢 1.408 倍(平滑、图像复制、图像格式转换等)

【讨论】:

我同意你所说的...... Opencv 在 x64 上运行得非常快。【参考方案2】:

试试看!

我能想到为什么会出现这种情况的原因(对您正在使用的软件不太熟悉)。

您的指针在 32 位进程中只有一半大,从而减少了内存压力。 32 位软件的存在时间更长,并且可能得到了更好的优化。但是,另一方面,图像处理往往能很好地响应 64 位进程提供的更大的寄存器大小。

我怀疑性能会在同一个球场内,可能正负 20%。但你永远无法确定。如果你得到数量级的类型差异,那我会很担心。

【讨论】:

【参考方案3】:

我们有一个类似的情况(PT Gray 相机和我们的 C# 应用程序的 emgu openCV 包装器)。

还发现 emgu 在 x64 下甚至更快(win 7 与 win XP x86 相比)。首先,我认为 x64 在我的应用程序的其余部分上速度较慢,但​​那是在调试模式下。在发布模式下,性能是相当的。看来VS2010(x64)下的调试版比VS2008版(x86)慢。

【讨论】:

以上是关于使用 64 位版本的 openCV+Emgu 而不是 32 位有性能优势吗?的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV和Emgu CV啥关系?

在Emgu中使用Erode和Dilate(OpenCV for C#)

OpenCV (Emgu.CV)——用 alpha 合成图像

C# 使用 OpenCV 剪切图片中的人物头像

opencv(emgu)中的模板匹配usink掩码

OpenCV/EMGU (C#) 物体检测