aboutsummaryrefslogtreecommitdiff
path: root/src/argaze/ArUcoMarkers/ArUcoMarker.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/argaze/ArUcoMarkers/ArUcoMarker.py')
-rw-r--r--src/argaze/ArUcoMarkers/ArUcoMarker.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/argaze/ArUcoMarkers/ArUcoMarker.py b/src/argaze/ArUcoMarkers/ArUcoMarker.py
new file mode 100644
index 0000000..4f716bb
--- /dev/null
+++ b/src/argaze/ArUcoMarkers/ArUcoMarker.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+
+from dataclasses import dataclass, field
+
+from argaze.ArUcoMarkers import ArUcoMarkersDictionary
+
+import numpy
+import cv2 as cv
+import cv2.aruco as aruco
+
+@dataclass
+class ArUcoMarker():
+ """Define ArUco marker class."""
+
+ dictionary: ArUcoMarkersDictionary.ArUcoMarkersDictionary
+ """ """
+
+ identifier: int
+ """ """
+
+ size: float
+ """Size of marker in centimeters."""
+
+ corners: numpy.array = field(init=False, repr=False)
+ """Estimated 2D corner positions in camera image referential."""
+
+ translation: numpy.array = field(init=False, repr=False)
+ """Estimated 3D center position in camera referential."""
+
+ rotation: numpy.array = field(init=False, repr=False)
+ """Estimated 3D marker rotation in camera referential."""
+
+ points: numpy.array = field(init=False, repr=False)
+ """Estimated 3D corners positions in camera referential."""
+
+ def center(self, i):
+ """Get 2D center position in camera image referential."""
+ return self.corners[0].mean(axis=0)
+
+ def draw(self, frame, K, D):
+ """Draw marker in frame."""
+
+ # Draw marker axis if pose has been estimated
+ if self.translation.size == 3 and self.rotation.size == 3:
+
+ cv.drawFrameAxes(frame, K, D, self.rotation, self.translation, self.size)
+
+ aruco.drawDetectedMarkers(frame, [self.corners], numpy.array([self.identifier])) \ No newline at end of file