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