我想做一些与计算机成像有关的工作。我正在寻找一种方法来读取数据的单个像素,以编程方式分析它们并更改它们。什么是最好的语言(Python、c++、Java...)?最好的文件格式是什么?
我不想要任何超级花哨的软件/API……我正在寻找最基本的东西。
我想做一些与计算机成像有关的工作。我正在寻找一种方法来读取数据的单个像素,以编程方式分析它们并更改它们。什么是最好的语言(Python、c++、Java...)?最好的文件格式是什么?
我不想要任何超级花哨的软件/API……我正在寻找最基本的东西。
如果您需要速度(您可能总是想要图像处理的速度),您肯定必须使用原始像素数据。Java 有一些真正的缺点,因为您不能直接访问内存,这使得像素访问与直接访问内存相比非常慢。C++ 绝对是生产使用图像处理的首选语言。但是,例如,您也可以使用 C#,因为它允许在特定区域使用不安全的代码。(看看 bitmapdata 类的 scan0 指针属性。)我已经成功地将 C# 用于图像处理应用程序,它们肯定比它们的 java 对应物快得多。我不会为此目的使用任何脚本语言或 java。
使用Python等高级语言来操作大型多维或复杂的像素信息数组是非常东方的。有一个名为PIL(Python Imaging Library)的库非常有用,它可以让您进行一般的过滤器和转换(更改亮度、柔化、去饱和度、裁剪等)以及操作原始像素数据。
我学习了人工智能和计算机视觉,因此我非常了解该领域使用的那种工具。
基本上:只要你知道它在幕后是如何工作的,你就可以使用任何你想要的东西。
现在根据您想要实现的目标,您可以使用:
被选为解决方案的答案非常偏颇,您应该小心这种过时的评论。
如今,硬件比湿件(人类)便宜,因此,您应该使用能够更快产生结果的语言,即使它以几个 CPU 周期或内存空间为代价。
此外,很多人倾向于认为,只要你用 C/C++ 实现你的软件,你就是在创造速度的圣杯:这不是真的。首先,因为算法的复杂性比你使用的语言更重要(一个糟糕的算法永远不会打败一个更好的算法,即使是用宇宙中最慢的语言实现),其次是因为现在高级语言做了很多事情为您提供缓存和速度优化,这可以使您的程序运行得比在 C/C++ 中更快。
当然,您总是可以在 C/C++ 中完成上述所有操作,但是您愿意浪费多少时间来重新发明轮子?
不仅 C/C++ 会更快,而且您发现的大多数图像处理示例代码也将使用 C 语言,因此更容易合并您找到的内容。
如果您正在寻找图像上的数值工作(想想矩阵)并且您进入 Python,请查看http://www.scipy.org/PyLab - 这基本上是在 python 中执行 matlab 的能力,我的朋友对此发誓。
这在一定程度上取决于你想要做什么。
如果运行时速度是您的问题,那么 c++ 是最好的方法。
但是,如果开发速度是一个问题,我建议您查看 java.util. 您说您想要对像素进行低级操作,java 将为您完成。但另一件事可能是一个问题是各种文件格式的处理。Java 确实有一些非常好的 API 来处理读取和写入各种图像格式到文件(特别是 java2d 库。您选择忽略更高级别的 API)
如果您确实选择了 c++ 选项(或者想到了 python),我会再次建议使用库来帮助您解决读取和写入文件的启动问题。我以前在libgd上取得过成功
你最懂什么语言?对我来说,这是真正的问题。如果您要花费数月和数月的时间来学习一种特定的语言,那么使用 Python 或 Java 并没有真正的优势,只是因为它们(有待证明)的开发速度。我特别精通 C++,例如,我认为对于这个特定的任务,我可以像 Java 程序员一样快速。借助一些好的库(想到 OpenCV),您可以在几行 C++ 代码中创建任何您需要的东西,真的。
简短回答:C++ 和 OpenCV
简短的回答?我会说 C++,你在处理原始内存块方面比 Python 或 Java 更灵活。