MATLAB与OpenCV

10

我已经使用OpenCV相当长的一段时间了,并且想知道转换到MATLAB是否是一个好主意。据我所知,它们都是基于底层OpenCV库构建的。OpenCV是开源的,这是一个明显的优势,并支持更多的平台。

我正在尝试针对瞳孔检测的特定算法,因此需要结果非常精确。

有人知道MATLAB使用的速度、处理或内置函数方面是否有任何优势吗?


坚持使用OpenCV并使用其Python绑定进行超快速开发。 - Pithikos
这不是太宽泛了,是一个足够合理的问题。有些人就像退役上校一样,毫无理由地刺伤孩子们的生殖器。 - ozgur
MATLAB作为解释器并不是为了速度而设计的,但它给你提供了使用所有功能的机会。通常你会在Matlab中进行测试,然后编写C代码以提高速度。OpenCV正如其名称所示,是基于专用库的框架。很难将两者进行比较...Matlab是一个“玩耍”和学习的沙盒(相对较慢)。OpenCV是专用和特定的(也很快)。 - Faisal shahzad
4个回答

14

如果您已经了解OpenCV,那么建议您继续使用OpenCV。目前,OpenCV是最全面的计算机视觉开源库,并拥有庞大的用户社区。相比Matlab,OpenCV提供更多的计算机视觉函数,并且许多函数已在GPU上实现。该库正在不断更新(每3到4个月发布一个更新版本)。通常情况下,C++ OpenCV代码运行速度比Matlab代码快(如果不够快,您可以通过优化源代码使其更快)。

Matlab适用于快速原型设计,而且Matlab代码非常容易调试。它具有良好的文档和支持。但是,正如其他人所提到的,Matlab不是开源软件,其许可证价格昂贵,程序也不可移植。Matlab是一种解释性语言,这会对其性能产生负面影响。在计算机视觉中,性能非常重要,特别是如果您正在进行实时视频处理。它的程序也可以运行得很快,但是您必须依赖高级函数(即以C语言编写的内置函数)、mex函数(自己编译的C代码),并学习如何矢量化您的代码以获得合理的速度。


3

您没有提到您如何使用OpenCV,因此我假设您正在使用C ++;如果您使用Python,请阅读此页面

如果您计划使用GPU进行处理,那么我建议您坚持使用C ++。当然,您可以对代码进行大量的 其他 优化

对于MATLAB,也可以做一些相当基本的事情

说到底,我认为你离机器级语言越近,性能就会越好。但当然,使用C可能很痛苦,因为存在编写未经优化的代码和内存泄漏的风险。出于这个原因,C++提供了最好的平衡。

希望对你有所帮助。


目前正在为Android开发,因此我认为OpenCV是最好的选择。但根据结果可能会进行切换。 - nette
再次强调,您没有说明使用的编程语言。如果您正在使用Android,我猜Java编写是一个不错的选择,因为这样可以更好地集成到SDK中。但是我仍然坚持我的观点:为了获得更好的性能,您需要使用C++。 - scap3y
1
不要假设C比C++低级别,从而更快。一个经典的例子是对一个数字列表进行排序。C++的std::sort通常比C语言的qsort快6倍。这是因为C++的排序是一个模板,它是一个高级构造,允许优化器访问比较函数。 - MSalters
当然。我并不是指具体的例子;我只是指大多数OpenCV的函数.. 每当我在C环境(使用MinGW)中使用OpenCV时,它都给了我更好的性能。 - scap3y

3
您的问题并没有真正意义。 OpenCV是用于执行计算机视觉任务的C++库。除了C++之外,还通过绑定支持其他编程语言。 MATLAB是一个完整的科学套件,由具有自己语言的大型IDE组成。
如果您想要在MATLAB中运行代码,则需要编写MATLAB代码。但是,您还需要安装一个4GB的IDE,并支付相当昂贵的许可证费用。
我个人的选择是使用带有Python语言绑定的OpenCV,因为这为我提供了一个漂亮的脚本界面来进行矩阵操作(可以说比MATLAB的略微更加凌乱),同时仍然可以轻松访问OpenCV函数。

0

如果你真正了解OpenCV,那么你肯定不会考虑从OpenCV转向Matlab。

你可以使用Python或C++甚至Java等编程语言来使用OpenCV。
实际上,你不应该仅考虑OpenCV来完成整个任务。
就像OpenCV一样,其他库也存在。
例如,
numpy -> 用于快速数值计算
matplotlib -> 显示图形窗口等,类似于Matlab。
scipy -> 用于快速科学计算。

如果你使用你的编程语言+OpenCV+Matplotlib+Numpy+Scipy,你肯定会对OpenCV感到惊喜。 而且,不要担心如何将这些库融合在一起。只需提及它们的名称并进行实际编码即可。就这样。


我知道OpenCV,只是对MATLAB不是很确定,所以提出了这个问题。 - nette
好的,Nette。没问题。如果你觉得我的回答可以,就把它标记为正确的。 - Thamizh
5
“your_programming_language + opencv + matplotlib + numpy + scipy”这部分内容不太有意义。Numpy、Matplotlib和Scipy都是Python包。为什么(以及如何)要将它们与其他编程语言结合使用呢? - Hannes Ovrén

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