packages feed

CV-0.3.5: 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

main = do
   Just x <- getArgs >>= loadImage . head
   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 (2,1) 2 [padToSize (getSize y) (result lst x) ,result lsty y]
   mapM_ print (take 5 lst)

padToSize :: (CreateImage (Image c d)) =>  (Int,Int) -> Image c d -> Image c d
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