aboutsummaryrefslogtreecommitdiff
path: root/src/argaze/ArUcoMarkers/ArUcoBoard.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/argaze/ArUcoMarkers/ArUcoBoard.py')
-rw-r--r--src/argaze/ArUcoMarkers/ArUcoBoard.py55
1 files changed, 21 insertions, 34 deletions
diff --git a/src/argaze/ArUcoMarkers/ArUcoBoard.py b/src/argaze/ArUcoMarkers/ArUcoBoard.py
index 5d2a39d..6c91fc6 100644
--- a/src/argaze/ArUcoMarkers/ArUcoBoard.py
+++ b/src/argaze/ArUcoMarkers/ArUcoBoard.py
@@ -1,4 +1,5 @@
#!/usr/bin/env python
+from dataclasses import dataclass, field
from argaze.ArUcoMarkers import ArUcoMarkersDictionary
@@ -6,74 +7,60 @@ import numpy
import cv2 as cv
import cv2.aruco as aruco
+@dataclass
class ArUcoBoard():
"""Calibration chess board with ArUco markers inside."""
- def __init__(self, columns: int, rows: int, square_size: float, marker_size: float, dictionary: ArUcoMarkersDictionary.ArUcoMarkersDictionary | str = None):
- """Create columns x rows chess board with ArUco markers at given size in centimeters."""
+ columns: int = field(default=0)
+ """Number of columns."""
- # Store properties
- self.__columns = columns
- self.__rows = rows
- self.__square_size = square_size # in cm
- self.__marker_size = marker_size # in cm
+ rows: int = field(default=0)
+ """Number of rows."""
- # Handle dictionary str or instance
- if dictionary != None:
+ square_size: float = field(default=0.)
+ """Size of board square in centimeter."""
- if type(dictionary) == str:
- self.dictionary = ArUcoMarkersDictionary.ArUcoMarkersDictionary(dictionary)
- elif isinstance(dictionary, ArUcoMarkersDictionary.ArUcoMarkersDictionary):
- self.dictionary = dictionary
- else:
- raise ValueError(f'dictionary: {dictionary}')
+ marker_size: float = field(default=0.)
+ """Size of ArUco markers inside board squares in centimeter."""
- else:
+ dictionary: ArUcoMarkersDictionary.ArUcoMarkersDictionary = field(default_factory=ArUcoMarkersDictionary.ArUcoMarkersDictionary)
+ """ArUco markers dictionary."""
- self.dictionary = ArUcoMarkersDictionary.ArUcoMarkersDictionary()
+ def __post_init__(self):
# Create board model
- self.__board = aruco.CharucoBoard((self.__columns, self.__rows), self.__square_size/100., self.__marker_size/100., self.dictionary.markers)
-
- def __del__(self):
- pass
-
- @property
- def model(self) -> aruco.CharucoBoard:
- """Get the board model."""
-
- return self.__board
+ self.model = aruco.CharucoBoard((self.columns, self.rows), self.square_size/100., self.marker_size/100., self.dictionary.markers)
@property
def identifiers(self) -> list[int]:
"""Get board markers identifiers."""
- return self.__board.getIds()
+ return self.model.getIds()
@property
def size(self)-> int:
"""Get numbers of columns and rows."""
- return self.__board.getChessboardSize()
+ return self.model.getChessboardSize()
@property
def markers_number(self) -> int:
"""Get number of markers."""
- return len(self.__board.getIds())
+ return len(self.model.getIds())
@property
def corners_number(self) -> int:
"""Get number of corners."""
- return (self.__board.getChessboardSize()[0] - 1 ) * (self.__board.getChessboardSize()[1] - 1)
+ return (self.model.getChessboardSize()[0] - 1 ) * (self.model.getChessboardSize()[1] - 1)
def save(self, destination_folder: str, dpi: int):
"""Save a picture of the calibration board into a destination folder."""
- output_filename = f'{self.__dictionary.name}_{self.__marker_size}cm_{self.__columns*self.__square_size}cmx{self.__rows*self.__square_size}cm.png'
+ output_filename = f'{self.dictionary.name}_{self.marker_size}cm_{self.columns*self.square_size}cmx{self.rows*self.square_size}cm.png'
- dimension = [round(d * self.__board.getSquareLength() * 100 * dpi / 2.54) for d in self.__board.getChessboardSize()] # 1 cm = 2.54 inches
+ dimension = [round(d * self.model.getSquareLength() * 100 * dpi / 2.54) for d in self.model.getChessboardSize()] # 1 cm = 2.54 inches
- cv.imwrite(f'{destination_folder}/{output_filename}', self.__board.generateImage(dimension))
+ cv.imwrite(f'{destination_folder}/{output_filename}', self.model.generateImage(dimension))