CV-0.3.4: examples/StupidConv.hs
{-#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