packages feed

CV-0.3.6.0: examples/surf.hs

{-#LANGUAGE FlexibleContexts#-}
module Main where
import CV.Image
import CV.Features
import CV.Drawing
import Utils.DrawingClass
import CV.DrawableInstances
import CV.ImageOp
import CV.Bindings.Types
import CV.Transforms
import Utils.GeometryClass
import System.Environment
import System.IO.Unsafe
import CV.ColourUtils
import CV.Filters
import CV.ImageMathOp

delit i = i #- gaussian (41,41) i

main = do
   Just x <- getArgs >>= loadImage . head >>= return 
    . fmap stretchHistogram 
    . fmap (gaussian (13,13))
    . fmap delit
   let y = scale Area (2.2,2) . rotate (pi/2) $ x
       lst  = getSURF defaultSURFParams (unsafeImageTo8Bit x) Nothing
       lsty = getSURF defaultSURFParams (unsafeImageTo8Bit y) Nothing
   let result lst x = (x <## map (draw.fst) lst) :: Image GrayScale D32
  -- [ellipseBoxOp 1 (C'CvBox2D c size d) 1 0
  --                    | (C'CvSURFPoint c l s d h,_) <- lst
  --                    , let size = C'CvSize2D32f (fromIntegral s) (fromIntegral $ s`div`2)
  --                    ]
   saveImage "surf_result.png" $ montage (1,2) 2 [x, (result lst x)] -- ,result lsty y]
   mapM_ print (take 5 lst)

padToSize :: (CreateImage (Image GrayScale D32)) =>  (Int,Int) 
                                                    -> Image GrayScale D32 
                                                    -> Image GrayScale D32 
padToSize size img = unsafePerformIO $ do
    let r = empty size
    blit r img (0,0)
    return r

-- main = do
--  let seq = C'CvSeq 1 10
--                    nullPtr nullPtr nullPtr nullPtr
--                    111
--                    12
--                    nullPtr
--                    nullPtr
--                    222
--                    nullPtr
--                    nullPtr
--
--  with seq c'printSeq
--  with seq $ \sp -> peek sp >>= print