1
1
{-# language DataKinds #-}
2
2
{-# language FlexibleInstances #-}
3
3
4
- import Control.Monad ( unless )
4
+ import Control.Monad ( unless , forM_ )
5
+ import Data.Function ( fix )
5
6
import qualified OpenCV as CV
6
7
import OpenCV.TypeLevel
7
8
import OpenCV.Photo
@@ -11,24 +12,21 @@ import OpenCV.Example
11
12
main :: IO ()
12
13
main = do
13
14
cap <- createCaptureArg
14
- CV. withWindow " gray" $ \ w1 -> CV. withWindow " boost" $ loop cap w1
15
- where
16
- loop cap grayWindow boostWindow = do
17
- _ok <- CV. videoCaptureGrab cap
18
- mbImg <- CV. videoCaptureRetrieve cap
19
- case mbImg of
20
- Just img -> do
21
- -- Assert that the retrieved frame is 2-dimensional.
22
- let img' :: CV. Mat ('S ['D, 'D]) ('S 3 ) ('S Word8 )
23
- img' = CV. exceptError $ CV. coerceMat img
15
+ CV. withWindow " gray" $ \ grayWindow ->
16
+ CV. withWindow " boost" $ \ boostWindow ->
17
+ fix $ \ continue -> do
18
+ _ok <- CV. videoCaptureGrab cap
19
+ mbImg <- CV. videoCaptureRetrieve cap
20
+ forM_ mbImg $ \ img -> do
21
+ -- Assert that the retrieved frame is 2-dimensional.
22
+ let img' :: CV. Mat ('S ['D, 'D]) ('S 3 ) ('S Word8 )
23
+ img' = CV. exceptError $ CV. coerceMat img
24
24
25
- let (grayImg, boostImg) = CV. exceptError $ decolor img'
25
+ (grayImg, boostImg) = CV. exceptError $ decolor img'
26
26
27
- CV. imshow grayWindow grayImg
28
- CV. imshow boostWindow boostImg
27
+ CV. imshow grayWindow grayImg
28
+ CV. imshow boostWindow boostImg
29
29
30
- key <- CV. waitKey 20
31
- -- Loop unless the escape key is pressed.
32
- unless (key == 27 ) $ loop cap grayWindow boostWindow
33
- -- Out of frames, stop looping.
34
- Nothing -> pure ()
30
+ key <- CV. waitKey 20
31
+ -- Loop unless the escape key is pressed.
32
+ unless (key == 27 ) continue
0 commit comments