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