ArUco Marker, print-ready.
calibrx.io · 6×5 markers · 20 mm · 5 mm gap · DICT_4X4_50
Printed it?
Start calibratingFreeArUco 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.
| Setting | Recommended | Why |
|---|---|---|
| Dictionary | DICT_4X4_50 for a few markers, DICT_6X6_250 for many | Fewer bits read from farther away; more bits give more unique IDs and fewer false detections. |
| Marker size | As large as your scene allows | Bigger markers are detected from farther away and give steadier pose estimates. |
| Separation | About 20–25% of the marker size | Keeps neighbouring markers apart in a grid board (5 mm for 20 mm markers). |
| Start ID | A different range per object | Separate ID ranges keep two marker sets distinct in the same scene. |
Detect it
Detect ArUco markers with OpenCV
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.
All in one
Calibration pattern generator
Every target in one tool, with a side-by-side comparison of when to use each.
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.