Haskell получает матрицу из изображения bmp

#haskell #image-processing

#haskell #обработка изображений

Вопрос:

Привет всем, я новичок в Haskell, я хочу прочитать и извлечь матрицу пикселей (чисел) из изображения bmp в оттенках серого в haskell, у кого-нибудь есть идея, как это сделать, я искал в Интернете, не найдя никаких подсказок, спасибо

Комментарии:

1. Серьезно? Есть много-много вопросов о загрузке изображений в Haskell. Если этот вопрос в основном касается того, как получить изображение в каком-то конкретном формате матрицы, то вам следует а) уточнить, в каком формате матрицы и б) в целом рассказать о том, что вы пробовали, продемонстрировать, что не сработало достаточно хорошо, когда вы просто следовали инструкциям по другому вопросу и т.д. и т.п..

Ответ №1:

К сожалению, существует не так много руководств по этой теме, как должно быть, но это, по крайней мере, не так сложно, как может показаться на первый взгляд. Как указал @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)>
 

Комментарии:

1. спасибо за ваш отзыв, извините за недостаток информации, у меня есть цифровые изображения bmp в оттенках серого, и я пытаюсь превратить матрицу, которую я получаю из растрового изображения после того, как прочитал ее, в вектор, чтобы обучить свою нейронную сеть. Я пробовал это с помощью Repa, но это работает ` x <- readImageFromBMP «../dat/img0.bmp» возвращает значение в ячейке x `. но это не работает