module CV.Marking where
import CV.Image as Image
import CV.Morphology
import CV.Edges as Edges
import CV.ImageOp as ImageOp
import CV.Sampling
import qualified CV.ImageMath as IM
import CV.Drawing
import CV.ColourUtils
import Foreign.C.Types
import CV.ImageMathOp
import Utils.Rectangle
boxFlaws i = Edges.laplace Edges.l1 $ dilate basicSE 5 (i)
highLightFlaws image flaws = displayFlaws
((0.2 |* flaws) #+ (0.8 |* image)) flaws
displayFlaws image = IM.sub image . IM.mulS 0.6 . boxFlaws
displayLargeFlaws image = IM.sub image . IM.mulS 0.6 . Edges.laplace l1
type Marker c d = (Int,Int) -> (Int,Int)
-> ImageOperation c d
condMarker condition m size t place = if condition t
then m size t place
else nonOp
getCoordsForMarkedTiles tileSize overlap marks image =
map fst $ filter (snd) $ zip coords marks
where
coords = getOverlappedTileCoords tileSize overlap image
cuteDot (x,y) =
circleOp 1
(x,y) (w*2) (Stroked 1) ImageOp.#> circleOp 0 (x,y) (w*21) (Stroked 1)
where w = 2
cuteCircle1 (x,y) =
circleOp 1
(x+w,y+w) (w*2) (Stroked 1) ImageOp.#> circleOp 0 (x+w,y+w) (w*21) (Stroked 1)
where w = 6
cuteRect (w,h) (x,y) =
rectOp 0.1 1 (Rectangle x y (x+w) (y+h)) ImageOp.#>
rectOp 1 1 (Rectangle (x+1) (y+1) (x+w1) (y+h1))
cuteCircle :: Marker GrayScale D32
cuteCircle (tw,th) (x,y) =
(circleOp 1
(x+tw`div`2,y+tw`div`2) (w) (Stroked 1) ) ImageOp.#> circleOp 0 (x+tw`div`2,y+tw`div`2) (w1) (Stroked 1)
where w = tw`div`2
markTiles image size overlap marker lst = marked
where
tileCoords = getOverlappedTileCoords size overlap image
markers = map (\(t,c) -> marker size t c) $ zip lst tileCoords
marked = unsafeOperate (foldl (ImageOp.#>) nonOp markers) image