{-#LANGUAGE BangPatterns#-} import CV.Image import CV.ColourUtils import Control.Monad import qualified CV.ImageMath as IM {-#INLINE (×)#-} a × b = [(a',b') | a' <- a , b' <- b] stupidConv im m = do res <- create (w-mw,h-mh) forM_ ([0..w-1-mw] × [0..h-1-mh]) $ \(x,y) -> setPixel (x,y) (sum [getPixel (x+i,y+j) im * getPixel (i,j) m | (i,j) <- [0..mw-1] × [0..mh-1]]) res return res where maskSize = IM.sum m (!mw,!mh) = getSize m (!w,!h) = getSize im main = do Just x <- loadImage "smallLena.jpg" m <- fromList (3,3) [-1,0,1 ,-1,0,1 ,-1,0,1] print (IM.sum x) r <- stupidConv x m print (IM.sum r) saveImage "stupid.png" $ stretchHistogram r fromList (w,h) xs = do i <- create (w,h) forM_ (zip ([0..w-1] × [0..h-1]) xs) $ \(p,v) -> setPixel p v i return i