OpenCV 2.4.11和3.0.0有什么区别?

27

最新发布的 OpenCV 版本是2.4.11,发布于2015年2月,比处于Beta版本的 3.0.0 更为新。它们之间有什么区别?如果我在3.0.0中遇到了一些错误,应该使用OpenCV 2.4.11吗?它们的发布方式是怎样的?


2021更新:请使用3.x版本:https://opencv.org/opencv-3-0/ - rinogo
3个回答

42
虽然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开发人员,则更好。OpenCV 3.0提供了之前不可用的类/方法的Java包装器(如广泛使用的KalmanFilter)
  3. 还有诸如内部模块重构之类的更改,从开发人员的角度来看,这些更改可能是次要的,因为可以通过更改代码中的OpenCV标头来解决。

关于发行周期,快速查看OpenCV github库(2)显示,pull request主要进入主分支,即OpenCV 3.0。因此,我假设,重大错误修复可能会被反向移植到2.4.*分支。

关于更多差异,请查看(3)和(4)。关于你在3.0 beta中遇到的错误,如果您能在OpenCV问题页面(5)上提供一个最小完整的可运行示例,那将会很有帮助。


请问您知道OpenCV 3.x的Java绑定是否支持OpenCL/CUDA吗? - Robula
Java绑定只是JNI包装器。因此,它们应该得到支持。 - kiranpradeep

13

3.0.0版本应该会带来许多新功能,但目前仅处于测试版,不是官方发布的版本(可能不稳定)。上一个官方稳定版本为2.4.11。

如果你需要使用2.4.11中没有的功能或者想要冒险尝试,可以使用3.0.0版本(3.0.0 beta很好,正式版本即将推出)。如果你只需要安全性而无需额外需求,则使用2.4.11。


1
你能列举一下3.0.0版本中额外的一些功能吗?为什么他们使用3.0.0作为版本号,而不是说2.4.12 beta? - Manish Kumar Sharma
7
3.0.0版本与2.4.x版本不完全向后兼容。此外,许多类已被完全重写,并且强调了GPU加速函数。新增了许多新模块,您可以在此处查看更改列表。 - Nicholas Betsworth
他们还开放了一个挑战,要求集成非常具有颠覆性的技术:http://code.opencv.org/projects/opencv/wiki/VisionChallenge - Tom A
@TomA:哇!太棒了。我希望这能在即将发布的版本中集成一些最优质的算法。 - Manish Kumar Sharma
@NicholasBetsworth 关于向后兼容性的评论似乎有些令人困惑。除非我们使用像UMat这样的新功能,否则3.0代码应该可以在2.4中运行,只需进行最小的更改,如包括头文件、枚举和命名空间。 - kiranpradeep
显示剩余2条评论

8
除了以上提供的答案,另一个重要的区别是SIFT/SURF特征检测已被移除默认的openCV 3.0包。由于它们受到专利保护,openCV已将“非免费”算法移到了不同的包中:
opencv_contrib

谢谢您指出这一点!OpenCV的新手应该知道安装“contrib”版本是微不足道的,因此实际上并不是什么大问题。 - rinogo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接