计算机视觉的好语言?


28

我正在尝试实现基于内容的图像检索系统,但在此之前,我想先概述一些适合此任务的编程语言(具有良好的库等)。

有谁知道一些很好的语言和库来完成此类任务?那么Python或Java呢?

最好


该范围是一个学术项目;-)很抱歉没有告诉您!
jstr 2012年

1
我在计算机视觉小组的软件启动工作中工作了大约3年。我们使用python + scipy / numpy进行快速原型设计,并使用C ++进行生产代码。用于重型C ++的boost :: python包装器有助于移植。BLAS和LAPACK用于大量数字内容。
2012年

2
@wim-您的评论将是一个很好的答案,并详细说明了为何在开发的不同阶段使用这些语言。
Mark Booth

1
您可以使用Matlab或Octave进行快速原型制作,然后借助Armadillo(用于线性代数)和MLPACK(用于机器学习和模式识别)等工具包将其转换为C ++ 。Armadillo内部使用BLAS和LAPACK(与Matlab相同)。您还可以通过Armadillo的mex接口将'n'match Matlab / Octave代码与C ++代码混合使用。
mtall 2014年

Answers:


35

也许您可以更具体地说明工作的范围和规模(学术项目?台式机或移动商业产品?基于Web的商业项目?)。

一些建议和意见:

  • Matlab在学术界很常见,非常适合草绘/验证想法。您将可以访问其他研究人员的大量代码(在CV和机器学习中);原型制作和调试将非常快速和容易,但是在这种环境下开发的任何东西都将难以投入生产。根据您的代码在做什么,您可能会遇到内存/性能问题(在某些情况下,您无法根据Matlab的原语来描述您想要做的事情,而不得不开始循环播放像素,而Matlab成为一种解释型语言却并非如此)在这种情况下提供帮助)。与数据库,Web服务器等的交互并不容易,有时甚至是不可能的(您不会获得Matlab程序成为Web前端调用的Thrift服务器)。费用$$$。

  • C ++是许多生产级CV系统所使用的(想像Google的图像搜索或Streetview规模,或者许多商业机器人应用规模的东西)。像OpenCV这样的好库,出色的性能,易于放入生产环境。如果您需要进行机器学习,那么这里有很多库(LibSVM / SVMlight,Torch)。如果您必须求助于“在所有像素上循环”代码,则效果会很好。易于用于对大型检索系统中所需的系统/存储层进行编码(例如:非常大的磁盘上的哈希图,用于将反索引映射特征散列存储到图像)。Thrift / Message Pack之类的东西可以将您的检索程序转换为RPC服务器,该服务器可以由Web前端调用。但是:原型制作不是很敏捷,尝试新想法非常糟糕,较慢的开发时间;并由经验不足的编码人员掌握,可能很难跟踪性能和/或不稳定问题。

  • Python在某种程度上介于两者之间。您可以将其用于Matlab样式的数值计算(带有numpy和scipy),并具有与OpenCV之类的库的绑定。您可以使用它来处理系统/数据结构,并获得可接受的性能。尽管比Matlab或C ++少,但有很多机器学习包。除非必须使用“在所有像素上循环”代码,否则您将能够以1:1.5到1:3的性能比和2:1到10:1的比例编写几乎可以用C ++完成的所有代码。源代码大小(有争议)。但是,根据项目的成功程度,有时会出现性能问题,而改写C ++则不是一个选择。


4
此外,与Python不同,Matlab在文档编制方面也非常强大。
Andrey Rubshtein 2012年

1
C呢?如果有疑问,那是我的首选语言。
Zetta Suro 2012年

10

特别是由于您的项目是学术性的,因此Mathematica是一个非常优秀且合适的软件系统。Mathematica 8带有用于图像处理,线性代数,数字,GPU等的全面功能。它还是一个符号系统,因此很多次我都可以得出方程的封闭式解决方案-对于计算机视觉任务非常方便。Mathematica还可以与Python,C,C ++,Java,.NET等代码进行通信。


5

如果这是一个学术项目,那么您绝对应该使用Matlab,尤其是图像处理工具箱和计算机视觉系统工具箱。与在C ++中相比,用Matlab进行算法原型设计和评估所需的时间要少几个数量级。

即使使用Python接口,OpenCV也比Matlab难用得多,如果确实需要,您可以通过mex从Matlab调用C或C ++代码。


4

用于图像检索系统。您将拥有客户端和服务器端代码。服务器端可以是Python或C / C ++。OpenCV是您的最佳选择。它同时具有python和C ++接口。对于客户端,我认为您最好使用Java。


3

最好的计算机视觉语言是C ++。尽管它的主要缺点是实现您想要的东西更加困难。OpenCV是那里最好的计算机视觉库,但是您可以使用matlab或python做同样的事情。

在这里看看。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.