OpenCV的最新版本显示2015 年 2 月11 日2.4.11比Beta 版3.0.0更新。他们之间有什么区别。我应该在 3.0.0 上使用 OpenCV 2.4.11,因为我在 3.0.0 中遇到了一些错误。他们的发布如何运作?
3 回答
尽管 OpenCV 3.0 中有新的特性(如文本检测、KAZE 检测器),但对于大多数开发人员来说,这种比较与特性无关。这是关于速度的。除非您立即投入生产,否则我建议您使用 OpenCV 3.0。此外,这远非冒险。
- 关键区别在于 OpenCV 3.0 中的透明 API。几乎所有 OpenCV 3.0 方法都是 OpenCL 加速的。因此,所有方法都可以在 GPU 上运行,这可能会导致 10% 到 230% 的改进。您的代码中需要的唯一更改是在您以前使用的
UMat
地方使用Mat
. 样品(1)。如果您需要 OpenCV 2.4.* 中的这种性能,您必须显式调用cv::ocl::*
或cv::gpu::*
方法。 - 如果您恰好是 Java 开发人员,那就更好了。以前不可用的类/方法的 Java 包装器现在在 OpenCV 3.0 中提供(参见广泛使用的 KalmanFilter)
- 从开发人员的角度来看,内部模块重组之类的变化很小,因为可以通过更改代码中的 OpenCV 标头来解决。
关于发布周期,快速浏览 OpenCV github repo( 2 ) 显示,拉取请求主要进入用于 OpenCV 3.0 的 master 分支。所以我认为,主要的错误修复可以向后移植到 2.4.* 分支。
有关更多信息,请阅读 ( 3 ) 和 ( 4 ) 的差异。关于您在 3.0 beta 中遇到的错误,如果您可以在 OpenCV 问题页面 ( 5 ) 上用最少的完整运行示例提出这些错误,它可能会有所帮助。
3.0.0 应该会带来很多新功能,但它目前是 beta 版而不是正式版本(可能不稳定)。最后一个正式的稳定版本是 2.4.11。
如果有您在 2.4.11 中没有检索到的功能,或者如果您喜欢冒险,请使用 3.0.0(3.0.0beta 很棒,最终版本应该很快就会发布)。如果您想要没有额外需求的安全性,请使用 2.4.11。
除了上面提供的答案之外,另一个重要的区别是 SIFT/SURF 特征检测已从默认的 openCV 3.0 包中删除。由于它们已获得专利,openCV 已将“非免费”算法移至不同的包:
opencv_contrib