我想用计算机图像的基本知识做一些工作。我正在寻找一种方法来读取单个像素的数据,以编程方式分析它们,并改变它们。什么是最好的语言(Python,C++,Java ...)?什么是最好的文件格式?图像识别
我不想要任何超级花哨的软件/ API ......我在寻找最基本的基础知识。
我想用计算机图像的基本知识做一些工作。我正在寻找一种方法来读取单个像素的数据,以编程方式分析它们,并改变它们。什么是最好的语言(Python,C++,Java ...)?什么是最好的文件格式?图像识别
我不想要任何超级花哨的软件/ API ......我在寻找最基本的基础知识。
如果你需要速度(你可能总是想要图像处理速度),你一定要使用原始像素数据。 Java有一些真正的缺点,因为无法直接访问内存,与直接访问内存相比,像素访问速度很慢。 C++绝对是生产用图像处理的首选语言。但是,例如,您也可以使用C#,因为它允许在特定区域使用不安全的代码。 (看看bitmapdata类的scan0指针属性。) 我已经成功地将C#用于图像处理应用程序,它们肯定比它们的java对应程序快得多。 我不会为此目的使用任何脚本语言或Java。
简答题?我会说C++,与Python或Java相比,您在处理原始块的内存方面拥有更大的灵活性。
C/C++不仅会更快,而且您发现的大多数图像处理示例代码也将以C语言编写,因此将您找到的内容整合起来会更容易。
(这可能不适用于仅谁想要的裸基础知识OP - 但现在的速度问题被提出来了,我确实需要写这个,只是备案)
如果真的需要速度,最好忘记逐像素级别的工作,而是看看您需要执行的操作是否可以是vectorized。例如,对于您的C/C++代码,您可以使用优秀的Intel IPP library(不,我不适用于英特尔)。
如果你正在寻找在你的图像(思维矩阵)和你到Python的数值工作检查http://www.scipy.org/PyLab - 这基本上是在Python中做matlab的能力,我的伙伴发誓它。
对于使用高级语言(如Python)操纵像素信息的大型多维或复杂阵列来说,这是非常重要的。有一个名为PIL (the Python Imaging Library的库)非常有用,它可以让你执行一般的滤镜和转换(改变亮度,软化,去饱和,裁剪等),并操纵原始像素数据。
这是我使用过的日期为easiest and simplest的图像库,可以扩展以执行任何您感兴趣的操作(例如,很少代码中的edge detection)。
这取决于你想要做什么。
如果运行速度是你的问题,那么C++是最好的选择。
如果开发速度是一个问题,但我会建议看看java。你说你想要低级别的像素操作,java会为你做。但另一件可能成为问题的事情是处理各种文件格式。 Java确实有一些非常好的API来处理读写各种图像格式的文件(特别是java2d库)。你选择忽略更高级别的API)
如果你确实去了C++选项(或者python来考虑它),我会再次建议使用库来帮助你解决启动时阅读的问题和写文件。我以前曾经成功过libgd
你认识哪一种语言最好?对我来说,这是真正的问题。 如果你要花几个月时间学习一种特定的语言,那么使用Python或Java仅仅是为了他们(被证明)的开发速度没有真正的优势。 我特别精通C++,我认为对于这个特殊的任务,我可以像Java程序员那样快速。借助一些优秀的库(OpenCV),您可以根据几行C++代码创建任何需要的东西,真的。
简短的回答:C++和OpenCV
我研究人工智能和计算机视觉,所以我知道相当不错了在该领域中使用的工具种类。基本上:只要你知道如何在场景后面工作,你可以使用任何你想要的东西。
现在取决于你想要达到的,您可以使用什么:
被选为解决方案的答案是非常偏袒的,你应该小心这种古老的评论。如今,硬件比湿件(人类)便宜,因此,应该使用能够更快产生结果的语言,即使代价只有几个CPU周期或内存空间。另外,很多人往往会认为只要你用C/C++实现你的软件,你就会使速度达到圣格拉尔:这是不正确的。首先,因为算法的复杂性比你使用的语言更重要(即使用宇宙中最慢的语言来实现,算法不好也算不上更好的算法),其次,因为高级语言现在做的很多的缓存和速度优化,这可以使您的程序运行速度比C/C++更快。
当然,您可以随时在C/C++中完成上述所有内容,但您愿意浪费多少时间重新发明轮子?