module CV.Bindings.ImgProc where
import Foreign.C.Types
import Foreign.Ptr
import Foreign.Marshal.Utils
import Foreign.Marshal.Array
import Foreign.ForeignPtr hiding (newForeignPtr)
import Foreign.Concurrent
import CV.Bindings.Types
import CV.Bindings.Core
import CV.Image
import System.IO.Unsafe
import CV.Bindings.Matrix
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
foreign import ccall "wrapCopyMakeBorder" c'wrapCopyMakeBorder
:: Ptr C'CvArr -> CInt -> CInt -> CInt -> CInt -> CInt -> CFloat -> IO (Ptr BareImage)
foreign import ccall "&wrapCopyMakeBorder" p'wrapCopyMakeBorder
:: FunPtr (Ptr C'CvArr -> CInt -> CInt -> CInt -> CInt -> CInt -> CFloat -> IO (Ptr BareImage))
data BorderType = BorderConstant | BorderReplicate | BorderReflect | BorderWrap
cBorderType t = case t of
BorderConstant -> c'IPL_BORDER_CONSTANT
BorderReplicate -> c'IPL_BORDER_REPLICATE
BorderReflect -> c'IPL_BORDER_REFLECT
BorderWrap -> c'IPL_BORDER_WRAP
copyMakeBorder :: Image d c -> Int -> Int -> Int -> Int -> BorderType -> Float -> IO (Image d c)
copyMakeBorder i t b l r border value =
withGenImage i $ \iptr ->
creatingImage $
c'wrapCopyMakeBorder iptr
(fromIntegral t)
(fromIntegral b)
(fromIntegral l)
(fromIntegral r)
(cBorderType border)
(realToFrac value)
foreign import ccall "cvMoments" c'cvMoments
:: Ptr C'CvArr -> Ptr C'CvMoments -> CInt -> IO ()
foreign import ccall "&cvMoments" p'cvMoments
:: FunPtr (Ptr C'CvArr -> Ptr C'CvMoments -> CInt -> IO ())
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))
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))
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))
foreign import ccall "cvGetHuMoments" c'cvGetHuMoments
:: Ptr C'CvMoments -> Ptr C'CvHuMoments -> IO ()
foreign import ccall "&cvGetHuMoments" p'cvGetHuMoments
:: FunPtr (Ptr C'CvMoments -> Ptr C'CvHuMoments -> IO ())
foreign import ccall "cvCornerHarris" c'cvCornerHarris
:: Ptr C'CvArr -> Ptr C'CvArr -> Int -> Int -> Double -> IO ()
foreign import ccall "&cvCornerHarris" p'cvCornerHarris
:: FunPtr (Ptr C'CvArr -> Ptr C'CvArr -> Int -> Int -> Double -> IO ())
c'CV_HOUGH_STANDARD = 0
c'CV_HOUGH_STANDARD :: (Num a) => a
c'CV_HOUGH_PROBABILISTIC = 1
c'CV_HOUGH_PROBABILISTIC :: (Num a) => a
c'CV_HOUGH_MULTI_SCALE = 2
c'CV_HOUGH_MULTI_SCALE :: (Num a) => a
c'CV_HOUGH_GRADIENT = 3
c'CV_HOUGH_GRADIENT :: (Num a) => a
foreign import ccall "cvHoughLines2" c'cvHoughLines2
:: Ptr C'CvArr -> Ptr () -> Int -> Double -> Double -> Int -> Double -> Double -> IO ()
foreign import ccall "&cvHoughLines2" p'cvHoughLines2
:: FunPtr (Ptr C'CvArr -> Ptr () -> Int -> Double -> Double -> Int -> Double -> Double -> IO ())
foreign import ccall "cvHoughCircles" c'cvHoughCircles
:: Ptr C'CvArr -> Ptr () -> Int -> Double -> Double -> Double -> Double -> Int -> Int -> IO ()
foreign import ccall "&cvHoughCircles" p'cvHoughCircles
:: FunPtr (Ptr C'CvArr -> Ptr () -> Int -> Double -> Double -> Double -> Double -> Int -> Int -> IO ())
foreign import ccall "wrapFilter2" c'wrapFilter2
:: Ptr C'CvArr -> Ptr C'CvArr -> Ptr C'CvMat -> Ptr C'CvPoint -> IO ()
foreign import ccall "&wrapFilter2" p'wrapFilter2
:: FunPtr (Ptr C'CvArr -> Ptr C'CvArr -> Ptr C'CvMat -> Ptr C'CvPoint -> IO ())
foreign import ccall "cvCalcArrBackProject" c'cvCalcArrBackProject
:: Ptr (Ptr C'IplImage) -> Ptr C'CvArr -> Ptr C'CvHistogram -> IO ()
foreign import ccall "&cvCalcArrBackProject" p'cvCalcArrBackProject
:: FunPtr (Ptr (Ptr C'IplImage) -> Ptr C'CvArr -> Ptr C'CvHistogram -> IO ())
c'CV_HIST_ARRAY = 0
c'CV_HIST_ARRAY :: (Num a) => a
foreign import ccall "cvCreateHist" c'cvCreateHist
:: Int -> Ptr Int -> Int -> Ptr (Ptr Float) -> Int -> IO (Ptr C'CvHistogram)
foreign import ccall "&cvCreateHist" p'cvCreateHist
:: FunPtr (Int -> Ptr Int -> Int -> Ptr (Ptr Float) -> Int -> IO (Ptr C'CvHistogram))
foreign import ccall "cvReleaseHist" c'cvReleaseHist
:: Ptr (Ptr C'CvHistogram) -> IO ()
foreign import ccall "&cvReleaseHist" p'cvReleaseHist
:: FunPtr (Ptr (Ptr C'CvHistogram) -> IO ())
foreign import ccall "cvCalcArrHist" c'cvCalcArrHist
:: Ptr (Ptr C'IplImage) -> Ptr C'CvHistogram -> Int -> Ptr C'CvArr -> IO ()
foreign import ccall "&cvCalcArrHist" p'cvCalcArrHist
:: FunPtr (Ptr (Ptr C'IplImage) -> Ptr C'CvHistogram -> Int -> Ptr C'CvArr -> IO ())
newtype Histogram = Histogram (ForeignPtr C'CvHistogram)
creatingHistogram fun = do
iptr :: Ptr C'CvHistogram <- fun
fptr :: ForeignPtr C'CvHistogram <- newForeignPtr iptr (with iptr c'cvReleaseHist)
return . Histogram $ fptr
emptyUniformHistogramND dims =
withArray dims $ \c_sizes ->
c'cvCreateHist 1 c_sizes c'CV_HIST_ARRAY nullPtr 1
c'CV_THRESH_BINARY = 0
c'CV_THRESH_BINARY :: (Num a) => a
c'CV_THRESH_BINARY_INV = 1
c'CV_THRESH_BINARY_INV :: (Num a) => a
c'CV_THRESH_TRUNC = 2
c'CV_THRESH_TRUNC :: (Num a) => a
c'CV_THRESH_TOZERO = 3
c'CV_THRESH_TOZERO :: (Num a) => a
c'CV_THRESH_TOZERO_INV = 4
c'CV_THRESH_TOZERO_INV :: (Num a) => a
c'CV_THRESH_MASK = 7
c'CV_THRESH_MASK :: (Num a) => a
c'CV_THRESH_OTSU = 8
c'CV_THRESH_OTSU :: (Num a) => a
c'CV_THRESH_OTSU_BINARY = 8
c'CV_THRESH_OTSU_BINARY :: (Num a) => a
c'CV_THRESH_OTSU_BINARY_INV = 9
c'CV_THRESH_OTSU_BINARY_INV :: (Num a) => a
c'CV_THRESH_OTSU_TRUNC = 10
c'CV_THRESH_OTSU_TRUNC :: (Num a) => a
c'CV_THRESH_OTSU_TOZERO = 11
c'CV_THRESH_OTSU_TOZERO :: (Num a) => a
c'CV_THRESH_OTSU_TOZERO_INV = 12
c'CV_THRESH_OTSU_TOZERO_INV :: (Num a) => a
foreign import ccall "cvThreshold" c'cvThreshold
:: Ptr C'CvArr -> Ptr C'CvArr -> CDouble -> CDouble -> CInt -> IO (CDouble)
foreign import ccall "&cvThreshold" p'cvThreshold
:: FunPtr (Ptr C'CvArr -> Ptr C'CvArr -> CDouble -> CDouble -> CInt -> IO (CDouble))
c'CV_ADAPTIVE_THRESH_MEAN_C = 0
c'CV_ADAPTIVE_THRESH_MEAN_C :: (Num a) => a
c'CV_ADAPTIVE_THRESH_GAUSSIAN_C = 1
c'CV_ADAPTIVE_THRESH_GAUSSIAN_C :: (Num a) => a
foreign import ccall "cvAdaptiveThreshold" c'cvAdaptiveThreshold
:: Ptr C'CvArr -> Ptr C'CvArr -> CDouble -> CInt -> CInt -> CInt -> CDouble -> IO ()
foreign import ccall "&cvAdaptiveThreshold" p'cvAdaptiveThreshold
:: FunPtr (Ptr C'CvArr -> Ptr C'CvArr -> CDouble -> CInt -> CInt -> CInt -> CDouble -> IO ())
foreign import ccall "fillConnectedComponents" c'fillConnectedComponents
:: Ptr C'IplImage -> Ptr CInt -> IO ()
foreign import ccall "&fillConnectedComponents" p'fillConnectedComponents
:: FunPtr (Ptr C'IplImage -> Ptr CInt -> IO ())
foreign import ccall "maskConnectedComponent" c'maskConnectedComponent
:: Ptr C'IplImage -> Ptr C'IplImage -> CInt -> IO ()
foreign import ccall "&maskConnectedComponent" p'maskConnectedComponent
:: FunPtr (Ptr C'IplImage -> Ptr C'IplImage -> CInt -> IO ())