首页 > 解决方案 > Haskell 从 bmp Image 获取矩阵

问题描述

大家好 我是 Haskell 的初学者 我想从 Haskell 中的灰度 bmp 图像中读取和提取像素(数字)矩阵 任何人都知道如何做到这一点 我在网上搜索但没有找到任何线索 谢谢

标签: haskellimage-processing

解决方案


不幸的是,关于这个主题的教程没有应有的那么多,但至少没有最初看起来那么难。正如@leftaroundabout 指出的那样,您需要做的第一件事是确定要用于处理矩阵的库。我个人会推荐massiv用于数组操作和massiv-io读取和写入图像。你没有具体说明你想对图像做什么,所以我在这个例子中提供的只是将一个 bmp 图像读入一个数组,打印一些关于矩阵的东西并以 jpg 格式写入:

module Main where

import Data.Massiv.Array as A
import Data.Massiv.Array.IO

main :: IO ()
main = do
  img <- readImage "frog.bmp" :: IO (Image S SRGB Word8)
  putStrLn $ "Size: " ++ show (size img)
  putStrLn $ "Pixel at <row:10, col:20>: " ++ show (img ! (10 :. 20))
  writeImageAuto "frog.jpg" img

青蛙 bmp

然后,如果您将该片段保存到名为 的文件convert-bmp.hs中,请将frog.bmp图像放在它旁边,然后使用stack

$ stack --resolver lts-16.25 runghc --package massiv --package massiv-io convert-bmp.hs 
Size: Sz (200 :. 320)
Pixel at <row:10, col:20>: <SRGB:( 61, 64, 35)>

推荐阅读