【问题标题】:what is the difference between OpenCV 2.4.11 and 3.0.0OpenCV 2.4.11 和 3.0.0 有什么区别
【发布时间】:2015-06-17 06:09:53
【问题描述】:

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

【问题讨论】:

标签: opencv opencv3.0


【解决方案1】:

虽然 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 包装器现在在 OpenCV 3.0 中提供(参见广泛使用的 KalmanFilter)
  3. 内部模块重组等变化,从 开发人员的观点是次要的,因为可以通过以下方式解决 更改代码中的 OpenCV 标头。

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

有关更多信息,请阅读 (3) 和 (4)。关于您在 3.0 beta 中遇到的错误,如果您可以在 OpenCV 问题页面 (5) 上用最少的完整运行示例提出这些错误,这可能会有所帮助。

【讨论】:

  • 您是否碰巧知道 OpenCV 3.x 的 Java 绑定是否支持 OpenCL/CUDA?
  • Java 绑定只是 JNI 包装器。所以他们应该支持。
【解决方案2】:

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

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

【讨论】:

  • 您能否列出 3.0.0 中另外存在的一些功能?为什么他们使用 3.0.0 版本而不是 2.4.12 测试版?
  • 3.0.0 不会完全向后兼容 2.4.x。最重要的是,许多类已经完全重写,并且强调了 GPU 加速功能。已经添加了许多新模块,您可以查看更改列表here
  • 他们还提出了整合极具颠覆性的技术的挑战:code.opencv.org/projects/opencv/wiki/VisionChallenge
  • @TomA:哇!那太好了。我希望最终会在即将发布的版本中集成一些质量最好的算法。
  • @NicholasBetsworth 关于向后兼容性的评论似乎令人困惑。除非我们使用 UMat 之类的新功能,否则 3.0 代码应该在 2.4 中运行,只需要对包含标头、枚举、命名空间等进行少量更改。
【解决方案3】:

除了上面提供的答案之外,另一个重要的区别是 SIFT/SURF 特征检测已从默认的 openCV 3.0 包中移除。 由于它们已获得专利,openCV 已将“非免费”算法转移到不同的包中:

opencv_contrib

【讨论】:

  • 感谢您指出这一点! OpenCV 的新手应该知道,安装“contrib”版本是微不足道的,所以在实践中,这没什么大不了的。
猜你喜欢
  • 1970-01-01
  • 2017-08-31
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
  • 2021-04-07
  • 2013-09-02
  • 2014-08-09
  • 1970-01-01
相关资源
最近更新 更多