[OpenCV实战]40 计算机视觉工具对比

2023-02-28,,,,

文章目录

1 简介
2 适用于计算机视觉的MATLAB
2.1 为什么要使用MATLAB进行计算机视觉:优点
2.2 为什么不应该将MATLAB用于计算机视觉:缺点
3 适用于计算机视觉的OpenCV(C++)
3.1 为什么要使用OpenCV(C++)进行计算机视觉:优点
3.2 为什么不应该将OpenCV(C++)用于计算机视觉:缺点
4 适用于计算机视觉的OpenCV(Python)
4.1 为什么要使用OpenCV(Python)进行计算机视觉:优点
4.2 为什么不应该将OpenCV(Python)用于计算机视觉:缺点
5 总结
6 参考

1 简介

我们经常将自己的工具与工艺混淆。工具可以帮助您练习手工艺品,但不能使您成为优秀的工匠。一个好的工匠的口袋里有很多不同的工具,所以她明智地使用了适合该工作的工具。她还没有嫁给这些工具。她嫁给了自己的手艺。

我经常被关于编程语言好坏的战争逗乐,人们对哪一种更好有很强的看法。事实是程序员应该选择适合其任务的语言。是否想快速构建Web应用程序?尝试使用Ruby on Rails或Django。想要为嵌入式设备编写高性能代码。尝试C。

在计算机视觉中,我们面临着类似的选择。计算机视觉工程师/程序员应该学习哪种工具-使用C++的OpenCV,使用Python的OpenCV或MATLAB?好消息是,今天我们有几种选择!十年前,还没有很好的计算机视觉库。如果您想学习,只需拿起一本书,然后开始编写自己的微型计算机视觉算法库即可。幸运的是,现在情况好多了。

如果您是初学者,我建议您使用阻力最小的路径,并选择一个您熟悉的工具。如果您是python程序员,请结合使用OpenCV和Python。如果您了解C++,请将C++与OpenCV一起使用。对于MATLAB同样如此。也就是说,几个月后您将不再是初学者。您可能希望将这些新获得的知识应用于现实世界。您可能正在考虑一个新的项目,或者在这个领域寻找新工作。知道如何做出选择是有必要的(有时是字面上的意思)。所以这是我的想法。

2 适用于计算机视觉的MATLAB

直到最近,计算机视觉还是一个研究领域,在它的婴儿时期。从事计算机视觉工作的人大多在学术界或研究实验室工作。他们选择的工具是MATLAB,最长一段时间以来,OpenCV与MATLAB及其社区提供的工具相比相形见绌。在过去的7年里,潮流已经改变了。下面是使用MATLAB的一些优点。

2.1 为什么要使用MATLAB进行计算机视觉:优点

    强大的矩阵库:我们不仅将图像视为计算机视觉中的多维矩阵,而且在各种算法中使用了大量的线性代数。MATLAB的线性代数例程非常强大且运行迅速(正确使用时)。一旦我们需要解决大型稀疏线性系统作为算法的一部分。这是MATLAB中的一行代码-类似于X = A \ b。我们假设我们的C++实现至少比MATLAB实现快3倍。事实证明,我们的C++实现的第一个版本比MATLAB版本要慢!我们花了几天的时间来匹配MATLAB例程的性能。因此,在MATLAB中,像反斜杠(\)这样的单个运算符有时是MATLAB会为您适当选择的强大算法的集合。
    工具箱:无论您需要什么,都有一个工具箱。他们有一个图像处理工具箱,一个计算机视觉工具箱以及一个统计和机器学习工具箱,它们提供了各种非常有用的算法的实现。这些功能通常提供一个干净明显的界面。通常将许多计算机视觉问题设置为优化问题。您正在尝试在某些约束下最大化或最小化某些目标函数。MATLAB中的优化工具箱提供了许多优化算法的出色实现。
    可视化和调试工具:使用MATLAB的乐趣之一是编写代码,可视化结果并在一个集成环境中进行调试。环境使您的工作效率极高。
    与OpenCV兼容:您可以使用MATLAB的OpenCV接口与OpenCV交互。
    出色的文档资料:即使是OpenCV的坚定支持者也承认,其文档资料很糟糕。相反,MATLAB附带了出色的文档和示例,可在IDE中轻松访问。仅凭出色的文档,就可以比使用OpenCV更快地在MATLAB 2x中进行编码。与OpenCV相比,MATLAB函数的设计也更好。例如,比较此简单代码以在OpenCV和MATLAB中显示图像。
    大多数时候,我只想显示图像。matlab将其称为“im”,而不是强迫我一遍又一遍地键入窗口名称(“ myWindow”)。

    // MATLAB
    imshow(im); // OpenCV
    imshow("myWindow", im);

    大型研究社区:正如我之前提到的,MATLAB在学术界非常流行。最新的研究演示经常作为MATLAB代码共享。如果您想站在最前沿,那么您应该能够阅读MATLAB代码。

2.2 为什么不应该将MATLAB用于计算机视觉:缺点

    昂贵的软件使用费:MATLAB非常昂贵(如果你是其他方式哈哈,你懂的那就忽略这条)。如果您通过大学以折扣价获得MATLAB,或者您的公司拥有许可证,则MATLAB是有意义的。
    学习曲线:MATLAB是矩阵引擎。有一种MATLAB编写代码的方式,与通用编程语言(如C++或Python)不同。而且,如果您不以MATLAB方式编写代码,则代码编写可能会非常慢。
    运行时间慢:典型的MATLAB程序运行速度比C++程序慢许多倍。内置的MATLAB例程可以非常快,但是用MATLAB编写的代码通常运行得慢得多。通常,人们最终会用C编码计算密集型部分。

3 适用于计算机视觉的OpenCV(C++)

OpenCV是开发计算机视觉应用程序的主要工具。大部分人的生产版本一直都是基于OpenCV的。让我们看一下利弊。

3.1 为什么要使用OpenCV(C++)进行计算机视觉:优点

    免费!:OpenCV的大部分内容都是免费的-即像演讲一样免费!您可以在商业应用程序中自由使用OpenCV,并且可以查看源代码并根据需要解决问题。如果使用OpenCV,则不必开源项目。
    庞大的优化库:OpenCV中可用的算法还针对性能进行了优化。使用OpenCV3,您可以使用Transparent API轻松使用计算机上符合OpenCL的设备(例如GPU)。许多算法都有CUDA实现。
    平台和设备:显然,您可以在桌面应用程序中或Web应用程序的后端使用OpenCV。由于OpenCV(C / C++)注重性能,因此它是许多嵌入式视觉应用程序和移动应用程序中选择的视觉库。
    大型社区:有一个使用并支持OpenCV的大型开发人员社区(约有4.7万)。它已被下载超过900万次。与由研究人员组成的MATLAB社区不同,OpenCV社区是来自许多领域和行业的人们的混合体。OpenCV开发由英特尔,AMD和Google等公司资助。不用说,这个博客是这个互相帮助的人的活跃社区的一部分。

3.2 为什么不应该将OpenCV(C++)用于计算机视觉:缺点

    初学者比较难:如果您没有C++编程经验,那么使用OpenCV(C++)将会令人生畏。您可能最好改用Python。
    文档薄弱: OpenCV文档不好。有时您需要对算法有一个很好的了解,并实际阅读本文,因为文档并不总是解释参数的含义以及它们如何影响结果。该文档并不总是附带示例代码,这使得它很难理解。OpenCV附带的示例代码虽然非常有用,但是也没有很好地记录下来。我们只是说这是正在进行的工作,人们正在努力改善它。
    小型机器学习库:计算机视觉工程师经常需要许多机器学习例程。与使用OpenCV(Python)时可用的选择相比,OpenCV拥有少量的机器学习算法。
    可视化和调试:在任何C++环境中,调试和可视化都很困难。如果您要从头开始提出新算法,则尤其如此。许多研究者有时将数据转储到磁盘,然后使用MATLAB进行分析

4 适用于计算机视觉的OpenCV(Python)

相信OpenCV的python版本为其流行度做出了很大贡献。它是学习计算机视觉的绝佳选择,并且足以满足各种实际应用。让我们看一下利弊。

4.1 为什么要使用OpenCV(Python)进行计算机视觉:优点

    易用性:如果您是python程序员,则使用OpenCV(Python)将非常容易。Python是一种易于学习的语言(特别是与C++相比)。它也是一种很好的学习第一语言。
    Python已成为科学计算的语言:几年前,MATLAB被称为科学计算的语言。但是现在,有了OpenCV,numpy,scipy,scikit-learn和matplotlib Python为学习和尝试计算机视觉和机器学习提供了强大的环境。
    可视化和调试:使用OpenCV(Python)时,您可以访问为Python编写的大量库。使用matplotlib的可视化效果与MATLAB差不多。我发现在Python中调试代码比在C++中更容易,但是它与MATLAB的超级易用性并不完全匹配。
    建立网站后端: Python也是建立网站的流行语言。诸如Django,Web2py和Flask之类的框架使您可以快速组合Web应用程序。将OpenCV(Python)与这些Web框架一起使用非常容易。

4.2 为什么不应该将OpenCV(Python)用于计算机视觉:缺点

    薄弱的文档:如前所述,OpenCV(C++)文档不是很好。但是python文档更加糟糕。新手用户只能猜测如何使用某些功能。例如,在撰写本文时,几乎找不到cv2.Subdiv2D的python文档。您还会发现有关OpenCV(Python)的教程较少。
    缺乏支持:支持OpenCV的公司(英特尔,AMD,NVidia等)在使用C++版本的OpenCV时遇到了麻烦。他们希望您使用OpenCV并购买其硬件(CPU / GPU等)来运行这些算法。但是,OpenCV(Python)似乎是红头发的继子,似乎并没有引起他们的注意。
    运行时间更慢:与C++相比,Python中的程序运行通常会更慢。要增加额外的麻烦,您可以在OpenCV(C++)中使用GPU(使用CUDA或OpenCL),并使代码运行速度比Python实现快10倍。
    OpenCV用C / C++编写:开源库的一大优点是可以修改它们以满足您的需求。如果要修改OpenCV,则必须修改C / C++源。

5 总结

作为工程师和工匠,我们需要使用正确的工具来完成正确的工作。最终,您必须学习此行业中的所有工具。根据经验,使用MATLAB / OpenCV(Python)制作新算法的原型,并在生产中使用OpenCV(C++)这是最合适不过的。
文章备份
https://luohenyueji.gitee.io

6 参考

OpenCV (C++ vs Python) vs MATLAB for Computer Vision

[OpenCV实战]40 计算机视觉工具对比的相关教程结束。