图像识别

时间:2020-03-06 14:49:05  来源:igfitidea点击:

我想对计算机成像的精妙之处做一些工作。我正在寻找一种读取数据的单个像素,以编程方式对其进行分析并进行更改的方法。最好的语言是什么(Python,c ++,Java ...)?最好的文件格式是什么?

我不想要任何超级花哨的软件/ API ...我正在寻找基本的基础知识。

解决方案

简短的答案?我想说C ++,我们在处理内存的原始块方面比Python或者Java灵活得多。

如果我们需要速度(我们可能始终希望图像处理具有速度),则绝对必须使用原始像素数据。
Java具有一些实际的缺点,因为我们无法直接访问内存,这使得像素访问与直接访问内存相比非常慢。
C ++绝对是用于生产用途图像处理的首选语言。但是,例如,我们也可以使用Cas,它允许在特定区域中使用不安全的代码。 (看看bitmapdata类的scan0指针属性。)
我已经在图像处理应用程序中成功使用了Cs,并且它们肯定比Java同行要快得多。
我不会为此目的使用任何脚本语言或者Java。

C / C ++不仅会更快,而且我们发现的大多数图像处理示例代码也将包含在C中,因此合并找到的内容会变得更加容易。

(这可能不适用于只需要基本知识的OP,但是由于速度问题已经出现,我确实需要编写此记录,以供记录。)

如果我们确实需要速度,最好不要在逐像素级别上工作,而要查看我们需要执行的操作是否可以向量化。例如,对于C / C ++代码,我们可以使用出色的Intel IPP库(不,我不适用于Intel)。

如果我们希望对图像(思维矩阵)进行数值运算,并且使用Python,请访问http://www.scipy.org/PyLab,这基本上是在python中做matlab的能力,我对此很是发誓。

使用诸如Python之类的高级语言来处理大型的多维或者复杂的像素信息数组,这些信息是图片,这是非常东方的。有一个称为PIL的库(Python Imaging Library),该库非常有用,可以让我们进行常规的滤镜和转换(更改亮度,柔化,去饱和度,裁剪等)以及处理原始像素数据。

这是我迄今为止使用过的最简单最简单的图像库,可以进行扩展以执行我们感兴趣的任何事情(例如,用很少的代码进行边缘检测)。

这在某种程度上取决于我们要执行的操作。

如果运行时速度是问题,那么c ++是最好的选择。

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

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

我们最了解哪种语言?对我来说,这是真正的问题。
如果我们要花数月时间学习一种特定的语言,那么仅使用Python或者Java(已证明)的开发速度就没有真正的优势。
我特别精通C ++,并且我认为对于此特定任务,我可以像Java程序员一样快。借助于一些好的库(可以想到OpenCV),我们实际上可以用几行C ++代码创建所需的任何东西。

简短答案:C ++和OpenCV