{-# LINE 1 "CV/Bindings/Features.hsc" #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LINE 2 "CV/Bindings/Features.hsc" #-}
module CV.Bindings.Features where

import Foreign.C.Types
import CV.Bindings.Types

import Foreign.Ptr (Ptr,FunPtr,plusPtr)
import Foreign.Ptr (wordPtrToPtr,castPtrToFunPtr)
import Foreign.Storable
import Foreign.C.Types
import Foreign.C.String (CString,CStringLen,CWString,CWStringLen)
import Foreign.Marshal.Alloc (alloca)
import Foreign.Marshal.Array (peekArray,pokeArray)
import Data.Int
import Data.Word

{-# LINE 8 "CV/Bindings/Features.hsc" #-}


{-# LINE 10 "CV/Bindings/Features.hsc" #-}

{-# LINE 11 "CV/Bindings/Features.hsc" #-}


{-# LINE 13 "CV/Bindings/Features.hsc" #-}

{-# LINE 14 "CV/Bindings/Features.hsc" #-}

{-# LINE 15 "CV/Bindings/Features.hsc" #-}

{-# LINE 16 "CV/Bindings/Features.hsc" #-}

{-# LINE 17 "CV/Bindings/Features.hsc" #-}
data C'CvSURFParams = C'CvSURFParams{
  c'CvSURFParams'extended :: CInt,
  c'CvSURFParams'hessianThreshold :: CDouble,
  c'CvSURFParams'nOctaves :: CInt,
  c'CvSURFParams'nOctaveLayers :: CInt
} deriving (Eq,Show)
p'CvSURFParams'extended p = plusPtr p 0
p'CvSURFParams'extended :: Ptr (C'CvSURFParams) -> Ptr (CInt)
p'CvSURFParams'hessianThreshold p = plusPtr p 8
p'CvSURFParams'hessianThreshold :: Ptr (C'CvSURFParams) -> Ptr (CDouble)
p'CvSURFParams'nOctaves p = plusPtr p 16
p'CvSURFParams'nOctaves :: Ptr (C'CvSURFParams) -> Ptr (CInt)
p'CvSURFParams'nOctaveLayers p = plusPtr p 20
p'CvSURFParams'nOctaveLayers :: Ptr (C'CvSURFParams) -> Ptr (CInt)
instance Storable C'CvSURFParams where
  sizeOf _ = 24
  alignment _ = 4
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 8
    v2 <- peekByteOff p 16
    v3 <- peekByteOff p 20
    return $ C'CvSURFParams v0 v1 v2 v3
  poke p (C'CvSURFParams v0 v1 v2 v3) = do
    pokeByteOff p 0 v0
    pokeByteOff p 8 v1
    pokeByteOff p 16 v2
    pokeByteOff p 20 v3
    return ()

{-# LINE 18 "CV/Bindings/Features.hsc" #-}

foreign import ccall "wrapExtractSURF" c'wrapExtractSURF
  :: Ptr C'CvArr -> Ptr C'CvArr -> Ptr (Ptr C'CvSeq) -> Ptr (Ptr C'CvSeq) -> Ptr C'CvMemStorage -> Ptr C'CvSURFParams -> Int -> IO ()
foreign import ccall "&wrapExtractSURF" p'wrapExtractSURF
  :: FunPtr (Ptr C'CvArr -> Ptr C'CvArr -> Ptr (Ptr C'CvSeq) -> Ptr (Ptr C'CvSeq) -> Ptr C'CvMemStorage -> Ptr C'CvSURFParams -> Int -> IO ())

{-# LINE 20 "CV/Bindings/Features.hsc" #-}


{-# LINE 22 "CV/Bindings/Features.hsc" #-}

{-# LINE 23 "CV/Bindings/Features.hsc" #-}

{-# LINE 24 "CV/Bindings/Features.hsc" #-}

{-# LINE 25 "CV/Bindings/Features.hsc" #-}

{-# LINE 26 "CV/Bindings/Features.hsc" #-}

{-# LINE 27 "CV/Bindings/Features.hsc" #-}

{-# LINE 28 "CV/Bindings/Features.hsc" #-}

{-# LINE 29 "CV/Bindings/Features.hsc" #-}

{-# LINE 30 "CV/Bindings/Features.hsc" #-}

{-# LINE 31 "CV/Bindings/Features.hsc" #-}
data C'CvMSERParams = C'CvMSERParams{
  c'CvMSERParams'delta :: Int,
  c'CvMSERParams'maxArea :: Int,
  c'CvMSERParams'minArea :: Int,
  c'CvMSERParams'maxVariation :: Float,
  c'CvMSERParams'minDiversity :: Float,
  c'CvMSERParams'maxEvolution :: Int,
  c'CvMSERParams'areaThreshold :: Double,
  c'CvMSERParams'minMargin :: Double,
  c'CvMSERParams'edgeBlurSize :: Int
} deriving (Eq,Show)
p'CvMSERParams'delta p = plusPtr p 0
p'CvMSERParams'delta :: Ptr (C'CvMSERParams) -> Ptr (Int)
p'CvMSERParams'maxArea p = plusPtr p 4
p'CvMSERParams'maxArea :: Ptr (C'CvMSERParams) -> Ptr (Int)
p'CvMSERParams'minArea p = plusPtr p 8
p'CvMSERParams'minArea :: Ptr (C'CvMSERParams) -> Ptr (Int)
p'CvMSERParams'maxVariation p = plusPtr p 12
p'CvMSERParams'maxVariation :: Ptr (C'CvMSERParams) -> Ptr (Float)
p'CvMSERParams'minDiversity p = plusPtr p 16
p'CvMSERParams'minDiversity :: Ptr (C'CvMSERParams) -> Ptr (Float)
p'CvMSERParams'maxEvolution p = plusPtr p 20
p'CvMSERParams'maxEvolution :: Ptr (C'CvMSERParams) -> Ptr (Int)
p'CvMSERParams'areaThreshold p = plusPtr p 24
p'CvMSERParams'areaThreshold :: Ptr (C'CvMSERParams) -> Ptr (Double)
p'CvMSERParams'minMargin p = plusPtr p 32
p'CvMSERParams'minMargin :: Ptr (C'CvMSERParams) -> Ptr (Double)
p'CvMSERParams'edgeBlurSize p = plusPtr p 40
p'CvMSERParams'edgeBlurSize :: Ptr (C'CvMSERParams) -> Ptr (Int)
instance Storable C'CvMSERParams where
  sizeOf _ = 44
  alignment _ = 4
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    v2 <- peekByteOff p 8
    v3 <- peekByteOff p 12
    v4 <- peekByteOff p 16
    v5 <- peekByteOff p 20
    v6 <- peekByteOff p 24
    v7 <- peekByteOff p 32
    v8 <- peekByteOff p 40
    return $ C'CvMSERParams v0 v1 v2 v3 v4 v5 v6 v7 v8
  poke p (C'CvMSERParams v0 v1 v2 v3 v4 v5 v6 v7 v8) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    pokeByteOff p 8 v2
    pokeByteOff p 12 v3
    pokeByteOff p 16 v4
    pokeByteOff p 20 v5
    pokeByteOff p 24 v6
    pokeByteOff p 32 v7
    pokeByteOff p 40 v8
    return ()

{-# LINE 32 "CV/Bindings/Features.hsc" #-}


{-# LINE 34 "CV/Bindings/Features.hsc" #-}
foreign import ccall "wrapExtractMSER" c'wrapExtractMSER
  :: Ptr C'CvArr -> Ptr C'CvArr -> Ptr (Ptr C'CvSeq) -> Ptr C'CvMemStorage -> Ptr C'CvMSERParams -> IO ()
foreign import ccall "&wrapExtractMSER" p'wrapExtractMSER
  :: FunPtr (Ptr C'CvArr -> Ptr C'CvArr -> Ptr (Ptr C'CvSeq) -> Ptr C'CvMemStorage -> Ptr C'CvMSERParams -> IO ())

{-# LINE 35 "CV/Bindings/Features.hsc" #-}

{-# LINE 36 "CV/Bindings/Features.hsc" #-}

foreign import ccall "cvMoments" c'cvMoments
  :: Ptr C'CvArr -> Ptr C'CvMoments -> Int -> IO ()
foreign import ccall "&cvMoments" p'cvMoments
  :: FunPtr (Ptr C'CvArr -> Ptr C'CvMoments -> Int -> IO ())

{-# LINE 38 "CV/Bindings/Features.hsc" #-}
foreign import ccall "cvGetSpatialMoment" c'cvGetSpatialMoment
  :: Ptr C'CvMoments -> CInt -> CInt -> IO CDouble
foreign import ccall "&cvGetSpatialMoment" p'cvGetSpatialMoment
  :: FunPtr (Ptr C'CvMoments -> CInt -> CInt -> IO CDouble)

{-# LINE 39 "CV/Bindings/Features.hsc" #-}
foreign import ccall "cvGetNormalizedCentralMoment" c'cvGetNormalizedCentralMoment
  :: Ptr C'CvMoments -> CInt -> CInt -> IO CDouble
foreign import ccall "&cvGetNormalizedCentralMoment" p'cvGetNormalizedCentralMoment
  :: FunPtr (Ptr C'CvMoments -> CInt -> CInt -> IO CDouble)

{-# LINE 40 "CV/Bindings/Features.hsc" #-}
foreign import ccall "cvGetCentralMoment" c'cvGetCentralMoment
  :: Ptr C'CvMoments -> CInt -> CInt -> IO CDouble
foreign import ccall "&cvGetCentralMoment" p'cvGetCentralMoment
  :: FunPtr (Ptr C'CvMoments -> CInt -> CInt -> IO CDouble)

{-# LINE 41 "CV/Bindings/Features.hsc" #-}