我想要做的一些工作与基本gritties计算机的成像。我在寻找一种方法读取单素的数据,分析它们通过程序,并改变他们。什么是最好的语言来使用这一(蟒蛇、c++、Java...)?什么是最好的文件格式?

我不想要任何的超级花哨的软件/Api...我在寻找裸露的基础。

有帮助吗?

解决方案

如果您需要速度(您可能总是希望速度与图像处理),您肯定必须使用原始像素数据。 Java有一些真正的缺点,因为你不能直接访问内存,这使得像素访问相比直接访问内存相当慢。 C ++绝对是生产使用图像处理的首选语言。但是,例如,您也可以使用C#,因为它允许在特定区域中使用不安全的代码。 (看一下bitmapdata类的scan0指针属性。) 我已经成功地将C#用于图像处理应用程序,它们肯定比它们的java同行快得多。 我不会为了这个目的使用任何脚本语言或java。

其他提示

使用高级语言(如 Python )操作大型多维或复杂像素信息数组是非常东方的。有一个名为 PIL(Python成像库)的库非常有用,可以让你做一般的滤镜和变换(改变亮度,软化,去饱和,裁剪等)以及操纵原始像素数据。

我是最简单最简单的图片库用于约会,可以扩展到你感兴趣的任何事情(例如,在很少的代码中进行边缘检测

不仅C / C ++会更快,而且你在那里找到的大部分图像处理示例代码也会在C中,所以你可以更容易地找到你找到的东西。

如果你正在寻找你的图像上的数字工作(想想矩阵)而你进入Python,请查看 http:/ /www.scipy.org/PyLab - 这基本上是在python中做matlab的能力,我的伙伴发誓。

(这可能不适用于那些只想要基础知识的OP - 但现在提出了速度问题,我确实需要写这个,只是为了记录。)

如果真的需要速度,最好忘记按像素级别进行操作,而不是看看你需要执行的操作是否矢量化。例如,对于您的C / C ++代码,您可以使用优秀的英特尔IPP库(不,我不为英特尔工作)。

这取决于你想要做什么。

如果运行速度是你的问题,那么c ++是最好的方法。

如果开发速度是一个问题,我建议看看java。你说你想要对像素进行低级操作,java会为你做。但另一件可能是问题的是处理各种文件格式。 Java确实有一些非常好的API来处理各种图像格式到文件的读写(特别是java2d库。你选择忽略更高级别的API)

如果你选择了c ++选项(或者python会想到它),我会再次建议使用库来解决读取和写入文件的启动问题。我以前在 libgd 上取得了成功

您最熟悉哪种语言?对我来说,这是一个真正的问题。 如果你要花费几个月和几个月学习一种特定的语言,那么使用Python或Java仅仅因为它们(有待证明)的开发速度没有真正的优势。 我特别精通C ++,我认为对于这个特定的任务,我可以像Java程序员一样快速。借助一些好的库(想到OpenCV),您可以在几行C ++代码中创建所需的任何东西。

简答:C ++和OpenCV

我研究了人工智能和计算机的视野,因而我知道漂亮好样的工具,是用在这个领域。

基本上:你可以使用任何你想要的,只要你知道它是如何工作背后的现场。

现在取决于你想要实现什么,你可以使用:

  • C语言,但是你会失去很多的时间在错误的检查和存储管理当实现你的算法。所以,从理论上讲,这是最快的语言要做到这样的工作,但是如果你的算法是不computationnally有效(在复杂性方面),或者如果你失去了太多的时间在错误的检查,这显然是不值得的。所以我会建议首先实施应用程序在另一种语言,再后来你总是可以优化小部分的你的代码C绑定。
  • 八度/MatLab:非常有效的语言,几乎一样多,因为C,你可以做的很优雅和简洁的算法。如果你进入的向量化,矩阵和线性操作,你应该去这一点。但是,你不能开发一个应用这种语言,这是更加集中的算法,但是然后你总是可以开发一个接口,使用另一种语言以后。
  • 蟒蛇:有一个优雅和易懂的语言,用于gigantically大规模应用,如谷歌、Facebook.你可以做很多你想要的一切与蟒蛇,任何种类的应用程序。它将完全适用,如果你想要做一个完整的应用程序(与客户的互动和所有不仅算法),或者如果你想快速起草一个原型的使用存在图书馆因为蟒蛇有一个非常大型的集高质量的图书馆,就像 该版本.但是如果你只想要做的算法,应该更好地利用倍频/MatLab。

答案,被选定为一个方案是非常biaised,你应该小心这种古老的评论。

如今,硬件是比较便宜的脑袋(人类),因此,应该使用的语言,你将能够产生结果的速度更快,即使是在成本的几CPU周期或存储空间。

此外,很多人倾向于认为,只要你执行你的软件在C/C++,你是做圣格拉尔的speedness:这只是不正确的。第一,因为算法的复杂性事项的更多的语言的使用(一个糟糕算法将永远不会打败一个更好的算法,即如果实现的速度最慢的语言在宇宙),其次是因为高级别的语言都是如今做了大量的缓和速度优化对于你,这可以让你的程序的运行速度甚至超过在C/C++。

当然,你可以一直做的一切,上述C/C++,但是如果你的时候你是否愿意浪费重新发明轮子呢?

简短回答?我想说C ++,你在操作原始内存块方面比Python或Java有更大的灵活性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top