使用Haskell检索图像的像素值

10

是否有一种可用的方式或库可以加载图像(jpeg、png等)并将该图像的像素值分配到列表或矩阵中?我想进行一些关于图像和模式识别的实验。

希望能给出指引。

5个回答

4

您可以使用JuicyPixels,这是一个本地的Haskell库,用于图像加载。将其转换为REPA也非常容易(手动或使用JuicyPixels-repa)。


1
Thomas,你知道我在哪里可以找到一些用法示例吗?文档对我来说读起来非常晦涩。 - subtlearray
1
不了解任务的情况下,我无法提供太多帮助。我建议从 func file = onImg someRepaFunction \fmap` readImage file开始。使用这行代码,您只需要定义someRepaFunction` 即可。 - Thomas M. DuBuisson
非常抱歉打扰您。我不知道什么是repa,也因为某些-dev C库的依赖关系无法在Windows上安装repa-devil。我的耐心终于耗尽了。我喜欢Haskell,但我再也无法处理这个问题了。再次感谢您的时间。 - subtlearray
1
Repa 是一个数组库,你可以在网上找到一些教程,其中一个链接在下面的答案中。如果你正在寻求更多实时帮助,我建议你尝试 IRC(freenode.net 上的 #haskell 频道)。 - Thomas M. DuBuisson

3

尝试使用 repa 库。此外,这里还有一个简短的教程 here


非常有用的教程。我已经保存了它以供离线查看。谢谢。 - subtlearray

3
我过去使用 repa-devil 包来实现这个功能。它使用开发者图像库 (DevIL) 来处理多种格式,您可以读取和写入所有您可能关心的格式。
实际的图像数据以 Repa 数组的形式给出。这是一个很棒的数组操作库,使编写并行代码非常容易。

1
自己(和其他人)的一个提醒:缺少C库:“IL”的可能是libdevil-dev。 - subtlearray

1
这里有一个新的Haskell图像处理库,它使用JuicyPixels进行编码,提供界面使您可以非常轻松地读写所有支持的格式,并以任何您能想象到的方式操纵它们。只是一个简单的例子,展示了它的易用性:
>>> img <- readImageRGB "image.jpg"
>>> writeImage "image90.png" $ rotate90 img

上面的代码将以RGB颜色空间读取一个JPG图像,将其顺时针旋转90度并保存为PNG图像。另外,它也可以使用Repa,因此您将免费获得并行处理的功能。

0
  1. GTK支持加载和保存JPEG和PNG格式的图片。[据我所知,没有其他格式。]有一个名为Gtk2hs的Haskell绑定。它非常好地支持了矢量图形,但是位图图形虽然也被支持,但不是特别容易理解。因此,我编写了AC-EasyRaster-GTK,它在更友好的界面中包装了GTK。(尽管仍需要Gtk2hs。)唯一的真正缺点是,在Windows上设置Gtk2h有点棘手。(而且安装整个GUI工具包只是为了加载和保存图像文件可能有些过度杀伤力。)

  2. 我了解到,“GD”库支持写入多种图像格式,并且非常小巧简单。我相信Hackage也有Haskell绑定的GD。我个人没有尝试过这个。

  3. 有一种名为PPM的文件格式,它被故意设计得非常容易实现(只有一个小标题和一个像素数组),因此至少有十几个Hackage包实现了它(包括我的AC-PPM)。还有很多程序可以显示和/或转换这种格式的图像。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接