Calibr

ArUco Marker, print-ready.

calibrx.io · 6×5 markers · 20 mm · 5 mm gap · DICT_4X4_50

ArUco generator

ArUco marker generator

Generate ArUco markers from the real OpenCV dictionaries — a single marker or a whole GridBoard — with exact marker size and spacing in millimetres, and download a print-ready PDF, SVG or PNG. It opens on a 6 × 5 board of 20 mm markers; set columns and rows to 1 for a single marker, and the start ID picks which one.

When to use it

When to use ArUco markers

ArUco markers are square binary codes that a detector identifies one by one. Single markers suit pose estimation, robot and AR tracking and tagging objects; a grid board puts many markers in one rigid, measured layout, so you can estimate the pose of the whole board even when some markers are hidden.

For calibrating the camera itself, a ChArUco board is more accurate: it adds checkerboard corners, which refine to sub-pixel precision, to the same marker IDs.

Recommended ArUco settings and why they work.
SettingRecommendedWhy
DictionaryDICT_4X4_50 for a few markers, DICT_6X6_250 for manyFewer bits read from farther away; more bits give more unique IDs and fewer false detections.
Marker sizeAs large as your scene allowsBigger markers are detected from farther away and give steadier pose estimates.
SeparationAbout 20–25% of the marker sizeKeeps neighbouring markers apart in a grid board (5 mm for 20 mm markers).
Start IDA different range per objectSeparate ID ranges keep two marker sets distinct in the same scene.

Detect it

Detect ArUco markers with OpenCV

python
import cv2

dictionary = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_4X4_50)
detector = cv2.aruco.ArucoDetector(dictionary, cv2.aruco.DetectorParameters())

gray = cv2.imread("view.jpg", cv2.IMREAD_GRAYSCALE)
corners, ids, rejected = detector.detectMarkers(gray)
print("marker IDs:", [] if ids is None else ids.flatten().tolist())

# for a grid board: markers across and down, marker size and gap in metres
board = cv2.aruco.GridBoard((6, 5), 0.020, 0.005, dictionary)

OpenCV 4.7 or later. Detect with the same dictionary you printed. Or skip the code: upload your photos to CalibrX and it detects the board and calibrates the camera for you.

FAQ

ArUco — common questions

What is the difference between ArUco and ChArUco?

ArUco markers are standalone coded squares. A ChArUco board places ArUco markers inside the white squares of a checkerboard, combining the marker IDs with precise checkerboard corners: better for camera calibration, while plain ArUco markers are better for tracking and pose.

Which ArUco dictionaries does OpenCV use?

OpenCV ships predefined dictionaries such as DICT_4X4_50, DICT_5X5_100 and DICT_6X6_250. The name gives the bit grid and the number of IDs. The generator draws markers from those same dictionaries, so they detect in OpenCV as printed.

How do I print ArUco markers at the right size?

Print at 100% or “actual size”, then measure the outer black edge of a marker with a ruler. Use that measured size in your code or in CalibrX: pose estimates scale directly with it.

More targets

Other calibration boards

ChArUco

ChArUco board generator

Checkerboard corners with ArUco IDs: the most forgiving target for calibrating any lens.

Checkerboard

Checkerboard generator

The classic chessboard target, with exact rows, columns and square size for OpenCV and MATLAB.

Circle grid

Circle grid generator

Asymmetric or symmetric dot patterns whose centres stay accurate in slightly soft images.

These targets follow the pattern geometry used by OpenCV. Read the official OpenCV calibration-pattern guide or continue with the CalibrX online calibration workflow.

Reviewed by the CalibrX engineering team · Updated September 2026.