HOpenCV 0.1.2.2 → 0.1.2.3
raw patch · 5 files changed
+128/−88 lines, 5 files
Files
- HOpenCV.cabal +8/−10
- src/AI/CV/OpenCV/CxCore.hsc +3/−1
- src/AI/CV/OpenCV/HighGui.hs +0/−74
- src/AI/CV/OpenCV/HighGui.hsc +117/−0
- src/AI/CV/OpenCV/Types.hs +0/−3
HOpenCV.cabal view
@@ -1,11 +1,11 @@ name: HOpenCV-version: 0.1.2.2+version: 0.1.2.3 license: BSD3 maintainer: Noam Lewis <jones.noamle@gmail.com> bug-reports: mailto:jones.noamle@gmail.com category: AI, Graphics synopsis: A binding for the OpenCV computer vision library-Tested-With: GHC == 6.10.4+Tested-With: GHC == 6.10.4, GHC == 7.0.4 description: Initial version with very limited bindings to OpenCV 2.0. (See: <http://opencv.willowgarage.com/wiki/Welcome>) .@@ -17,11 +17,9 @@ . You must install OpenCV (development packages) prior to installing this package. Currently only tested on Ubuntu Linux, but should work on most linux distributions. For OpenCV installation on other *nix platforms, see <http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.0/> .- On /Ubuntu/ systems, the appropriate version of OpenCV can be installed by (the instructions are for Karmic):+ On /Ubuntu/ systems, the appropriate version of OpenCV can be installed by: .- > sudo add-apt-repository ppa:gijzelaar/opencv2-karmic- > sudo apt-get update- > sudo apt-get install libcv-dev libhighgui-dev+ > sudo apt-get install libcv-dev libhighgui-dev libcvaux-dev . You should then have libcv4 and libhighgui4 installed automatically too. .@@ -41,8 +39,8 @@ src/AI/CV/OpenCV/HOpenCV_wrap.c hs-Source-Dirs: src include-dirs: /usr/include/opencv- extra-libraries: cv,highgui- build-depends: base >=4 && <5, allocated-processor >= 0.0.1, vector-space+ pkgconfig-depends: opencv+ build-depends: base >= 4 && < 5, allocated-processor >= 0.0.1, vector-space ghc-options: -Wall -fno-warn-type-defaults executable test-hopencv@@ -50,11 +48,11 @@ src/AI/CV/OpenCV/HOpenCV_wrap.c include-dirs: /usr/include/opencv hs-source-dirs: src- Build-Depends: base >=4 && <5+ Build-Depends: base >= 4 && < 5 main-is: Test.hs Ghc-Options: -Wall -fno-warn-type-defaults Ghc-Prof-Options: -prof -auto-all - extra-libraries: cv,highgui+ pkgconfig-depends: opencv other-modules: AI.CV.OpenCV.CxCore, AI.CV.OpenCV.CV, AI.CV.OpenCV.HighGui, AI.CV.OpenCV.Types
src/AI/CV/OpenCV/CxCore.hsc view
@@ -5,9 +5,11 @@ import Foreign.ForeignPtrWrap import Foreign.C.Types import Foreign.C.String-import Foreign+import Foreign hiding (unsafePerformIO) import Data.VectorSpace as VectorSpace++import System.IO.Unsafe (unsafePerformIO) #include <cxcore.h>
− src/AI/CV/OpenCV/HighGui.hs
@@ -1,74 +0,0 @@-{-# LANGUAGE ForeignFunctionInterface, EmptyDataDecls #-}- -module AI.CV.OpenCV.HighGui where- -import Foreign.ForeignPtrWrap-import Foreign.C.Types-import Foreign.Ptr-import Foreign.ForeignPtr-import Foreign.C.String- -import AI.CV.OpenCV.CxCore------------------------------------------------------ General-foreign import ccall unsafe "highgui.h cvConvertImage"- c_cvConvertImage :: Ptr CvArr -> Ptr CvArr -> CInt -> IO ()--cvConvertImage :: (IplArrayType a, IplArrayType a1) => Ptr a -> Ptr a1 -> CInt -> IO ()-cvConvertImage src dst flags = c_cvConvertImage (fromArr src) (fromArr dst) flags----------------------------------------------------- Capturing-data CvCapture---foreign import ccall unsafe "highgui.h cvCreateCameraCapture"- c_cvCreateCameraCapture :: CInt -> IO (Ptr CvCapture)- -cvCreateCameraCapture :: CInt -> IO (Ptr CvCapture)-cvCreateCameraCapture x = errorName "Failed to create camera" . checkPtr $ c_cvCreateCameraCapture . fromIntegral $ x- -foreign import ccall unsafe "highgui.h cvCreateFileCapture"- c_cvCreateFileCapture :: CString -> IO (Ptr CvCapture)- -cvCreateFileCapture :: String -> IO (Ptr CvCapture)-cvCreateFileCapture filename = err' . checkPtr $ withCString filename f- where err' = errorName $ "Failed to capture from file: '" ++ filename ++ "'"- f filenameC = c_cvCreateFileCapture filenameC- --foreign import ccall unsafe "HOpenCV_warp.h release_capture"- cvReleaseCapture :: Ptr CvCapture -> IO ()--foreign import ccall unsafe "HOpenCV_warp.h &release_capture"- cp_release_capture :: FunPtr (Ptr CvCapture -> IO () )- -createCameraCaptureF :: CInt -> IO (ForeignPtr CvCapture)-createCameraCaptureF = (createForeignPtr cp_release_capture) . cvCreateCameraCapture----foreign import ccall unsafe "highgui.h cvQueryFrame"- c_cvQueryFrame :: Ptr CvCapture -> IO (Ptr IplImage)--cvQueryFrame :: Ptr CvCapture -> IO (Ptr IplImage)-cvQueryFrame cap = errorName "Failed to query frame from camera" . checkPtr $ c_cvQueryFrame cap------------------------------------------------------ Windows-foreign import ccall unsafe "HOpenCV_wrap.h new_window"- c_newWindow :: CInt -> CInt -> IO ()--newWindow :: CInt -> Bool -> IO ()-newWindow num autoSize = c_newWindow num (if autoSize then 1 else 0)--foreign import ccall unsafe "HOpenCV_wrap.h del_window"- delWindow :: CInt -> IO ()--foreign import ccall unsafe "HOpenCV_wrap.h show_image"- showImage :: CInt -> Ptr IplImage -> IO ()--foreign import ccall unsafe "highgui.h cvWaitKey"- waitKey :: CInt -> IO CInt
+ src/AI/CV/OpenCV/HighGui.hsc view
@@ -0,0 +1,117 @@+{-# LANGUAGE ForeignFunctionInterface, EmptyDataDecls #-}+ +module AI.CV.OpenCV.HighGui where+ +import Control.Monad+import Foreign.ForeignPtrWrap+import Foreign.C.Types+import Foreign.Ptr+import Foreign.ForeignPtr+import Foreign.C.String+ +import AI.CV.OpenCV.CxCore++#include <highgui.h>++------------------------------------------------+-- General+foreign import ccall unsafe "highgui.h cvConvertImage"+ c_cvConvertImage :: Ptr CvArr -> Ptr CvArr -> CInt -> IO ()++cvConvertImage :: (IplArrayType a, IplArrayType a1) => Ptr a -> Ptr a1 -> CInt -> IO ()+cvConvertImage src dst flags = c_cvConvertImage (fromArr src) (fromArr dst) flags++------------------------------------------------+-- Capturing+data CvCapture+++foreign import ccall unsafe "highgui.h cvCreateCameraCapture"+ c_cvCreateCameraCapture :: CInt -> IO (Ptr CvCapture)+ +cvCreateCameraCapture :: CInt -> IO (Ptr CvCapture)+cvCreateCameraCapture x = errorName "Failed to create camera" . checkPtr $ c_cvCreateCameraCapture . fromIntegral $ x+ +foreign import ccall unsafe "highgui.h cvCreateFileCapture"+ c_cvCreateFileCapture :: CString -> IO (Ptr CvCapture)+ +cvCreateFileCapture :: String -> IO (Ptr CvCapture)+cvCreateFileCapture filename = err' . checkPtr $ withCString filename f+ where err' = errorName $ "Failed to capture from file: '" ++ filename ++ "'"+ f filenameC = c_cvCreateFileCapture filenameC+ ++foreign import ccall unsafe "HOpenCV_warp.h release_capture"+ cvReleaseCapture :: Ptr CvCapture -> IO ()++foreign import ccall unsafe "HOpenCV_warp.h &release_capture"+ cp_release_capture :: FunPtr (Ptr CvCapture -> IO () )+ +createCameraCaptureF :: CInt -> IO (ForeignPtr CvCapture)+createCameraCaptureF = (createForeignPtr cp_release_capture) . cvCreateCameraCapture++++foreign import ccall unsafe "highgui.h cvQueryFrame"+ c_cvQueryFrame :: Ptr CvCapture -> IO (Ptr IplImage)++cvQueryFrame :: Ptr CvCapture -> IO (Ptr IplImage)+cvQueryFrame cap = errorName "Failed to query frame from camera" . checkPtr $ c_cvQueryFrame cap++-------------------------------------------------+-- Windows+foreign import ccall unsafe "HOpenCV_wrap.h new_window"+ c_newWindow :: CInt -> CInt -> IO ()++newWindow :: CInt -> Bool -> IO ()+newWindow num autoSize = c_newWindow num (if autoSize then 1 else 0)++foreign import ccall unsafe "HOpenCV_wrap.h del_window"+ delWindow :: CInt -> IO ()++foreign import ccall unsafe "HOpenCV_wrap.h show_image"+ showImage :: CInt -> Ptr IplImage -> IO ()++foreign import ccall unsafe "highgui.h cvWaitKey"+ waitKey :: CInt -> IO CInt++foreign import ccall unsafe "highgui.h cvNamedWindow"+ cvNamedWindow :: CString -> CInt -> IO CInt++type AutoSize = Bool++titledWindow :: String -> AutoSize -> IO Int+titledWindow s a+ = do cs <- newCString s+ i <- cvNamedWindow cs (fromToInteger $ fromEnum a)+ return $ fromToInteger i++fromToInteger :: (Integral a, Num b) => a -> b+fromToInteger = fromInteger . toInteger++newtype LoadImageColor = LoadImageColor { unLoadImageColor :: CInt }++#{enum LoadImageColor, LoadImageColor+ , loadImageColor = CV_LOAD_IMAGE_COLOR+ , loadImageGrayscale = CV_LOAD_IMAGE_GRAYSCALE+ , loadImageUnchanged = CV_LOAD_IMAGE_UNCHANGED }++foreign import ccall unsafe "highgui.h cvLoadImage"+ c_cvLoadImage :: CString -> CInt -> IO (Ptr IplImage)++cvLoadImage :: String -> LoadImageColor -> IO (Ptr IplImage)+cvLoadImage filename (LoadImageColor color) = err' . checkPtr $ withCString filename f+ where+ err' = errorName $ "Failed to load from file: '" ++ filename ++ "'"+ f filenameC = c_cvLoadImage filenameC color++foreign import ccall unsafe "highgui.h cvSaveImage"+ c_cvSaveImage :: CString -> Ptr CvArr -> IO CInt++cvSaveImage :: String -> Ptr IplImage -> IO CInt+cvSaveImage filename image = withCString filename f+ where+ f filenameC = do+ ret <- c_cvSaveImage filenameC (fromArr image)+ when (ret == 0) $ fail $ "Failed to save to file: '" ++ filename ++ "'"+ return ret
src/AI/CV/OpenCV/Types.hs view
@@ -5,9 +5,6 @@ import AI.CV.OpenCV.HighGui import Foreign-import Foreign.ForeignPtr-- type PImage = Ptr IplImage type PCapture = Ptr CvCapture