【发布时间】:2012-10-05 19:00:03
【问题描述】:
是否有可用的方法或库可以加载图像(jpeg、png 等)并将该图像的像素值分配到列表或矩阵中?我想做一些关于图像和模式识别的实验。
我们将不胜感激。
【问题讨论】:
标签: haskell image-processing libraries image-recognition
是否有可用的方法或库可以加载图像(jpeg、png 等)并将该图像的像素值分配到列表或矩阵中?我想做一些关于图像和模式识别的实验。
我们将不胜感激。
【问题讨论】:
标签: haskell image-processing libraries image-recognition
这是一个新的Haskell Image Processing library,它使用 JuicyPixels 进行编码,为您提供了以非常简单的方式读取和写入所有支持的格式并以您可以想象的任何方式操作它们的接口。就像一个简单的例子说明它是多么容易:
>>> img <- readImageRGB "image.jpg"
>>> writeImage "image90.png" $ rotate90 img
上面会读取RGB色彩空间的JPG图片,顺时针旋转90度,保存为PNG图片。
哦对了,它也可以使用 Repa,所以你也可以免费获得并行处理。
【讨论】:
您可以使用 JuicyPixels,这是一个用于图像加载的原生 Haskell 库。这也很容易转换为 REPA(手动或使用 JuicyPixesl-repa)。
【讨论】:
func file = onImg someRepaFunction `fmap` readImage file 开始。使用该行,您应该只需要定义someRepaFunction。
我过去曾为此使用过repa-devil 包。它允许您使用 Developer's Image Library (DevIL) 处理多种格式。您可以读取和写入您可能关心的所有格式。
实际图像数据以Repa 数组的形式给出。这是一个很棒的数组操作库,可以很容易地编写并行代码。
【讨论】:
GTK 支持加载和保存 JPEG 和 PNG。 [AFAIK,虽然没有其他格式。] 有一个名为 Gtk2hs 的 Haskell 绑定。它很好地支持 vector 图形,但 bitmap 图形虽然受支持,但并不特别容易理解。所以我写了AC-EasyRaster-GTK,它将GTK包装在一个更友好的界面中。 (尽管它仍然需要Gtk2hs。)唯一真正的缺点是Gtk2h 在Windows 上设置起来有点繁琐。 (而且安装一个完整的 GUI 工具包只是为了加载和保存图像文件可以说是矫枉过正。)
我收集到“GD”库支持编写多种图像格式,并且非常小而简单。我相信 Hackage 也有用于 GD 的 Haskell 绑定。我没有亲自尝试过。
有一种名为 PPM 的文件格式被故意设计成非常容易实现(它是一个很小的标题,然后是一个像素数组),因此 Hackage 上至少有十几个包可以实现它(包括我自己的AC-PPM)。还有很多程序可以显示和/或转换这种格式的图像。
【讨论】: