packages feed

CV-0.3.1.2: examples/TestIop.hs

module Main where
import CV.Image
import CV.ImageOp
import qualified CV.Filters as F
import CV.ImageMath
import Foreign.Ptr
import CV.ColourUtils
import Prelude hiding (subtract, (.), id)
import qualified CV.ImageMath as IM
import Control.Category
idOp = IOP return

subtract = IOP $ \(a,b) -> do
                withGenImage a $ \ca -> 
                 withGenImage b $ \cb -> cvSub ca cb ca nullPtr >> return a

subtractScalar sc = IOP $ \a -> do
                  withGenImage a $ \ca -> 
                    wrapSubS ca (realToFrac sc) ca >> return a

mulScalar sc = IOP $ \a -> do
                  withGenImage a $ \ca -> 
                    cvConvertScale ca ca (realToFrac sc) 0 >> return a

liftIOP f = IOP (return.f)

--stretch image = stretched
--            where
--             stretched = (1/realToFrac length) `IM.mulS` normed
--             normed = image `IM.subS` (realToFrac min)
--             length = max-min
--             (min,max) = IM.findMinMax image

ret x = IOP (const (return x))

gaussian s = fromImageOp (F.gaussianOp s)

main = do
    Just x <- loadImage "elaine.jpg"
    let iop = (gaussian (11,11) &#& id) >>> subtract >>> mulScalar 3
    runIOP iop x >>= saveImage "IOPTest.png"