ChArUco Board, print-ready.
calibrx.io · 7×5 squares · 25/18 mm · DICT_6X6_250
Printed it?
Start calibratingFreeChArUco generator
ChArUco board generator
Create a ChArUco calibration board in exact millimetres: choose the OpenCV ArUco dictionary, the number of squares, the square and marker size and the first marker ID, then download a print-ready PDF, SVG or PNG. The board detects as-is in OpenCV and in CalibrX.
When to use it
When to use a ChArUco board
A ChArUco board is a checkerboard with an ArUco marker in every white square. The markers give each corner an identity, so the detector can still use a board that runs off the edge of the frame, sits at a steep angle or is partly covered.
Those are exactly the views that matter most for lens distortion: the corners and edges of the image. That makes ChArUco the best default for calibrating pinhole, wide-angle and fisheye lenses.
| Setting | Recommended | Why |
|---|---|---|
| Squares | 7 × 5 on A4 (the default), 10 × 7 on A3 | A 7 × 5 board gives 24 corners per view while the squares stay large enough to detect from a distance. |
| Square size | 25 mm on A4, 35–40 mm on A3 | Bigger squares detect from farther away; the board must still fit the page at 100% scale. |
| Marker size | About 70–75% of the square (18 mm on 25 mm) | Leaves a white border around each marker so markers and corners do not merge. |
| Dictionary | DICT_5X5_100 or DICT_6X6_250 | It needs at least as many IDs as markers (17 on a 7 × 5 board). Coarser 5 × 5 markers read from farther away. |
| Start ID | 0 | Change it only to tell two boards apart in the same scene. |
Detect it
Detect a ChArUco board with OpenCV
import cv2
dictionary = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_6X6_250)
# 7 x 5 squares, 25 mm squares, 18 mm markers (lengths in metres)
board = cv2.aruco.CharucoBoard((7, 5), 0.025, 0.018, dictionary)
detector = cv2.aruco.CharucoDetector(board)
gray = cv2.imread("view.jpg", cv2.IMREAD_GRAYSCALE)
corners, ids, marker_corners, marker_ids = detector.detectBoard(gray)
print(0 if ids is None else len(ids), "ChArUco corners found")OpenCV 4.7 or later. Use the numbers printed under the board you downloaded. Or skip the code: upload your photos to CalibrX and it detects the board and calibrates the camera for you.
FAQ
ChArUco — common questions
Which ArUco dictionary should I use for a ChArUco board?
Any dictionary with at least as many IDs as the board has markers. DICT_5X5_100 and DICT_6X6_250 are the usual choices: 5 × 5 markers have larger cells and read from farther away, 6 × 6 offers more IDs for big boards. Detect with the same dictionary you printed.
Can I calibrate a fisheye lens with a ChArUco board?
Yes, and it is the best target for it. Fisheye images curve strongly towards the edges, where a plain checkerboard often fails to detect; a ChArUco board still yields every visible corner. CalibrX solves pinhole, wide-angle and fisheye models from the same photos.
How many photos of the board do I need?
Around 15 to 30 sharp views that together cover the whole image — centre, edges and corners — with the board tilted up to about 45°. Views near the image edges improve the distortion estimate more than extra views of the centre.
More targets
Other calibration boards
Checkerboard
Checkerboard generator
The classic chessboard target, with exact rows, columns and square size for OpenCV and MATLAB.
ArUco
ArUco marker generator
Single markers or grid boards from the real OpenCV dictionaries, for tracking and pose estimation.
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.