aboutsummaryrefslogtreecommitdiff
path: root/src/argaze/ArUcoMarkers
diff options
context:
space:
mode:
Diffstat (limited to 'src/argaze/ArUcoMarkers')
-rw-r--r--src/argaze/ArUcoMarkers/ArUcoDetector.py15
-rw-r--r--src/argaze/ArUcoMarkers/ArUcoMarker.py28
2 files changed, 28 insertions, 15 deletions
diff --git a/src/argaze/ArUcoMarkers/ArUcoDetector.py b/src/argaze/ArUcoMarkers/ArUcoDetector.py
index 5076f3d..135eb08 100644
--- a/src/argaze/ArUcoMarkers/ArUcoDetector.py
+++ b/src/argaze/ArUcoMarkers/ArUcoDetector.py
@@ -274,12 +274,19 @@ class ArUcoDetector():
return len(list(self.__detected_markers.keys()))
- def draw_detected_markers(self, image: numpy.array):
- """Draw traked markers."""
+ def draw_detected_markers(self, image: numpy.array, draw_marker: dict = None):
+ """Draw detected markers.
- for marker_id, marker in self.__detected_markers.items():
+ Parameters:
+ image: image where to draw
+ draw_marker: ArucoMarker.draw parameters (if None, no marker drawn)
+ """
+
+ if draw_marker is not None:
+
+ for marker_id, marker in self.__detected_markers.items():
- marker.draw(image, self.optic_parameters.K, self.optic_parameters.D)
+ marker.draw(image, self.optic_parameters.K, self.optic_parameters.D, **draw_marker)
def detect_board(self, image: numpy.array, board, expected_markers_number):
"""Detect ArUco markers board in image setting up the number of detected markers needed to agree detection.
diff --git a/src/argaze/ArUcoMarkers/ArUcoMarker.py b/src/argaze/ArUcoMarkers/ArUcoMarker.py
index 3a13c10..57bd8bd 100644
--- a/src/argaze/ArUcoMarkers/ArUcoMarker.py
+++ b/src/argaze/ArUcoMarkers/ArUcoMarker.py
@@ -12,7 +12,7 @@ from dataclasses import dataclass, field
from argaze.ArUcoMarkers import ArUcoMarkersDictionary
import numpy
-import cv2 as cv
+import cv2
import cv2.aruco as aruco
@dataclass
@@ -40,9 +40,6 @@ class ArUcoMarker():
points: numpy.array = field(init=False, repr=False)
"""Estimated 3D corners positions in camera world referential."""
- color: tuple = field(init=False, repr=False, default_factory=lambda : (0, 255, 0))
- """Color used to draw marker on image."""
-
@property
def center(self) -> numpy.array:
"""Get 2D center position in camera image referential."""
@@ -59,15 +56,24 @@ class ArUcoMarker():
return numpy.repeat(matrix, 3).reshape(dimension, dimension, 3)
- def draw(self, image: numpy.array, K, D):
- """Draw marker in image."""
+ def draw(self, image: numpy.array, K, D, color: tuple = None, draw_axes: dict = None):
+ """Draw marker in image.
+
+ Parameters:
+ image: image where to draw
+ color: marker color (if None, no marker drawn)
+ draw_axes: enable marker axes drawing
+ """
+
+ # Draw marker if required
+ if color is not None:
- # Draw marker axis if pose has been estimated
- if self.translation.size == 3 and self.rotation.size == 9:
+ aruco.drawDetectedMarkers(image, [self.corners], numpy.array([self.identifier]), color)
- cv.drawFrameAxes(image, numpy.array(K), numpy.array(D), self.rotation, self.translation, self.size)
+ # Draw marker axes if pose has been estimated and if required
+ if self.translation.size == 3 and self.rotation.size == 9 and draw_axes is not None:
- aruco.drawDetectedMarkers(image, [self.corners], numpy.array([self.identifier]), self.color)
+ cv2.drawFrameAxes(image, numpy.array(K), numpy.array(D), self.rotation, self.translation, self.size, **draw_axes)
def save(self, destination_folder, dpi):
"""Save marker image as .png file into a destination folder."""
@@ -75,5 +81,5 @@ class ArUcoMarker():
filename = f'{self.dictionary.name}_{self.dictionary.format}_{self.identifier}.png'
filepath = f'{destination_folder}/{filename}'
- cv.imwrite(filepath, self.image(dpi))
+ cv2.imwrite(filepath, self.image(dpi))