OpenCV 2.4.11 和 3.0.0 有什么区别

what is the difference between OpenCV 2.4.11 and 3.0.0

OpenCV 的最新版本显示 2.4.11 2015 年 2 月,比 3.0.0 更新 处于测试阶段。它们之间有什么区别。我应该在 3.0.0 上使用 OpenCV 2.4.11,因为我在 3.0.0 中遇到了一些错误。他们的发布如何运作?

3.0.0 应该会带来很多新功能,但它目前是测试版而不是正式版本(可能不稳定)。最后一个官方稳定版本是 2.4.11.

如果您在 2.4.11 中没有找到某些功能,或者您喜欢冒险(3.0.0beta 很棒,最终版本应该很快就会发布),请使用 3.0.0。如果您想要安全而没有其他需求,请使用 2.4.11。

尽管 OpenCV 3.0 中有新功能(如文本检测、KAZE 检测器),但对于大多数开发人员而言,此比较与功能无关。大约是速度。除非您立即投入生产,否则我建议您使用 OpenCV 3.0。此外,这远非冒险。

  1. 关键区别在于 OpenCV 3.0 中的透明 API。几乎所有的 OpenCV 3.0 方法都是 OpenCL 加速的。因此,所有方法都可以在 GPU 上 运行,这可能会导致性能从 10% 提高到 230%。您的代码中唯一需要更改的是在您过去使用 Mat 的地方使用 UMat。样品(1)。如果您在 OpenCV 2.4.* 中需要这种性能,您必须显式调用 cv::ocl::*cv::gpu::* 方法。
  2. 如果您恰好是 Java 开发人员,那就更好了。 Java 之前不可用的 classes/methods 包装器现在在 OpenCV 3.0 中提供(参见广泛使用的 KalmanFilter)
  3. 有内部模块重组等变化,来自 从开发人员的角度来看,这是次要的,因为可以通过以下方式解决 在您的代码中更改 OpenCV headers。

关于发布周期,快速查看 OpenCV github repo(2) 显示,拉取请求主要进入 OpenCV 3.0 的主分支。所以我假设,主要错误修复可以向后移植到 2.4.* 分支。

有关差异的更多信息,请阅读 (3) and (4). About the bugs you encountered in 3.0 beta, it could helpful, if you could raise them with a minimal complete running sample at OpenCV issues page(5)。

除了上面提供的答案之外,另一个重要区别是 SIFT/SURF 特征检测已从默认的 openCV 3.0 包中删除。 由于它们已获得专利,openCV 已将 'non-free' 算法移至不同的包:

opencv_contrib