OpenCV bindings

Connected components

The following example performs connected component analysis.

components.png
components.png
(use-modules (aiscm core) (aiscm opencv) (aiscm magick))
(define result (connected-components (gt (green (read-image "letters.png")) 0) 8))
(define count (cdr result))
(define components (car result))
(define r (to-array (map (lambda _ (random 192)) (iota count))))
(define g (to-array (map (lambda _ (random 192)) (iota count))))
(define b (to-array (map (lambda _ (random 192)) (iota count))))
(define colors (+ (rgb r g b) 64))
(set colors 0 (rgb 0 0 0))
(write-image (warp colors components) "components.png")

Charuco board

The example below shows how to use OpenCV to detect a Charuco board.

(use-modules (oop goops) (aiscm opencv) (aiscm image) (aiscm v4l2) (aiscm xorg) (aiscm core))
(define v (make <v4l2>))
(show
  (lambda _
    (let* [(img     (from-image (read-image v)))
           (markers (detect-markers img DICT_4X4_50))]
      (if (zero? (size-of (car markers)))
        img
        (let [(corners (interpolate-corners markers img 5 7 100 50))]
          (draw-corners img corners))))))

A Charuco board image can be generated as follows.

(use-modules (aiscm opencv) (aiscm magick) (aiscm core))
(write-image (charuco-board 5 7 100 50 DICT_4X4_50) "board.png")
board.png
board.png

A printed Charuco board can be used to calibrate a camera as shown below.

(use-modules (oop goops) (aiscm core) (aiscm image) (aiscm v4l2) (aiscm xorg) (aiscm opencv))
(define v (make <v4l2>))
(define object-points '())
(define image-points '())
(show
  (lambda _
    (let* [(img     (from-image (read-image v)))
           (markers (detect-markers img DICT_4X4_50))]
      (if (zero? (size-of (car markers)))
        img
        (let* [(corners (interpolate-corners markers img 5 7 100 50))
               (object  (grid (1- 7) 0.02 (car corners)))
               (image   (cdr corners))]
          (if (>= (car (shape (car corners))) 5)
            (begin
              (set! object-points (cons object object-points))
              (set! image-points (cons image image-points))))
          (draw-corners img corners))))))
(define cal (camera-calibration object-points image-points (shape v)))
(format #t "reprojection error = ~a~&" (car cal))
(write-camera-calibration "camera.yml" (cadr cal) (caddr cal))

AIscm documentation generated by Pandoc 2020-09-07