Lifted mainly from opencv/doc/pattern_tools. A really simple way to generate some patterns.
Added some extra utilities like YAML files, loading from YAML files etc
pip install opencv-patternusage: pattern [-H] [--from_config FROM_CONFIG] [-o OUTPUT] [-c COLUMNS] [-r ROWS] [-T {circles,acircles,checkerboard,radon_checkerboard,charuco_board}]
[-u {mm,inches,px,m}] [-s SQUARE_SIZE] [-R RADIUS_RATE] [-w PAGE_WIDTH] [-h PAGE_HEIGHT] [-a {A0,A1,A2,A3,A4,A5}]
[-m MARKERS [MARKERS ...]] [-p ARUCO_MARKER_SIZE] [-f DICT_FILE]
generate camera-calibration pattern
options:
-H, --help show help
--from_config FROM_CONFIG
generate pattern from config
-o OUTPUT, --output OUTPUT
output file
-c COLUMNS, --columns COLUMNS
pattern columns
-r ROWS, --rows ROWS pattern rows
-T {circles,acircles,checkerboard,radon_checkerboard,charuco_board}, --type {circles,acircles,checkerboard,radon_checkerboard,charuco_board}
type of pattern
-u {mm,inches,px,m}, --units {mm,inches,px,m}
length unit
-s SQUARE_SIZE, --square_size SQUARE_SIZE
size of squares in pattern
-R RADIUS_RATE, --radius_rate RADIUS_RATE
circles_radius = square_size/radius_rate
-w PAGE_WIDTH, --page_width PAGE_WIDTH
page width in units
-h PAGE_HEIGHT, --page_height PAGE_HEIGHT
page height in units
-a {A0,A1,A2,A3,A4,A5}, --page_size {A0,A1,A2,A3,A4,A5}
page size, superseded if -h and -w are set
-m MARKERS [MARKERS ...], --markers MARKERS [MARKERS ...]
list of cells with markers for the radon checkerboard. Marker coordinates as list of numbers: -m 1 2 3 4 means markers in cells
[1, 2] and [3, 4]
-p ARUCO_MARKER_SIZE, --marker_size ARUCO_MARKER_SIZE
aruco markers size for ChAruco pattern (default 10.0)
-f DICT_FILE, --dict_file DICT_FILE
file name of custom aruco dictionary for ChAruco patternGenerates a pattern with the config.
pattern --from_config /path/to/configpattern -T checkerboard -s 5 -u mm --output checkerboard.svgcolumns: 8
from_config: null
output: checkerboard.svg
p_type: checkerboard
page_size: A4
radius_rate: 5.0
rows: 11
square_size: 5.0
units: mmpattern -T circles -s 5 -u mm --output circles.svgcolumns: 8
from_config: null
output: circles.svg
p_type: circles
page_size: A4
radius_rate: 5.0
rows: 11
square_size: 5.0
units: mmpattern -T acircles -s 5 -u mm --output acircles.svgcolumns: 8
from_config: null
output: acircles.svg
p_type: acircles
page_size: A4
radius_rate: 5.0
rows: 11
square_size: 5.0
units: mmpattern -T radon_checkerboard -s 5 -u mm --output radon_checkerboard.svgcolumns: 8
from_config: null
output: radon_checkerboard.svg
p_type: radon_checkerboard
page_size: A4
radius_rate: 5.0
rows: 11
square_size: 5.0
units: mmpattern -T charuco_board --dict_file DICT_ARUCO_ORIGINAL.json.gz --output charuco_board.svgYou can either choose one of:
- DICT_4X4_50.json.gz
- DICT_4X4_100.json.gz
- DICT_4X4_250.json.gz
- DICT_4X4_1000.json.gz
- DICT_5X5_50.json.gz
- DICT_5X5_100.json.gz
- DICT_5X5_250.json.gz
- DICT_5X5_1000.json.gz
- DICT_6X6_50.json.gz
- DICT_6X6_100.json.gz
- DICT_6X6_250.json.gz
- DICT_6X6_1000.json.gz
- DICT_7X7_50.json.gz
- DICT_7X7_100.json.gz
- DICT_7X7_250.json.gz
- DICT_7X7_1000.json.gz
- DICT_APRILTAG_16h5.json.gz
- DICT_APRILTAG_25h9.json.gz
- DICT_APRILTAG_36h10.json.gz
- DICT_APRILTAG_36h11.json.gz
- DICT_ARUCO_ORIGINAL.json.gz
or your own personal dict file.
aruco_marker_size: 10.0
columns: 8
dict_file: DICT_ARUCO_ORIGINAL.json.gz
from_config: null
output: charuco_board.svg
p_type: charuco_board
page_size: A4
radius_rate: 5.0
rows: 11
square_size: 20.0
units: mmExample of how to run in the API:
# example_checkerboard.py
from opencv_pattern.gen_pattern import PatternMaker
"""
Checkerboard example"""
# Parameters (same as CLI args)
cols = 8
rows = 11
output = "checkerboard.svg"
units = "mm"
square_size = 5.0
radius_rate = 5.0
page_width = 210 # A4 width in mm
page_height = 297 # A4 height in mm
markers = None
aruco_marker_size = 10.0
dict_file = "DICT_ARUCO_ORIGINAL.json" # not used for checkerboard
# Create the pattern maker
pm = PatternMaker(
cols, rows, output, units,
square_size, radius_rate,
page_width, page_height,
markers, aruco_marker_size, dict_file
)
# Generate checkerboard
pm.make_checkerboard_pattern()
# Save result
pm.save()
print(f"Checkerboard saved to {output}")
"""
Charuco board example
"""
# Parameters
cols = 8
rows = 11
output = "charuco_board.svg"
units = "mm"
square_size = 20.0 # must be larger than aruco_marker_size
radius_rate = 5.0
page_width = 210 # A4
page_height = 297
markers = None
aruco_marker_size = 10.0
dict_file = "DICT_4X4_1000.json.gz" # bundled in the package
# Create the pattern maker
pm = PatternMaker(
cols, rows, output, units,
square_size, radius_rate,
page_width, page_height,
markers, aruco_marker_size, dict_file
)
# Generate ChArUco board
pm.make_charuco_board()
# Save result
pm.save()
print(f"ChArUco board saved to {output}")