Home / Guides / Label placement

Where to put a label, and a corner mark

Keep it short, in the black border row at the Studio's own size, or put it outside the white quiet zone. Never in the quiet zone itself, and not near a ChArUco corner. Every verdict below is the Studio's own output on a test board you can open.

The short answer

  • Safethe black border row, on any side, at the Studio's own size (half a cell) with a short id like #12. (B1, B2, B3 and B4)
  • Safeoutside the quiet zone, on any side, with a Gap of 0 or more. (D1, D2, D5, D6 and D7)
  • Safea ChArUco label in its black square; a grid's in its border row. (E1 and E2)
  • Safethe black triangle corner mark, and ChArUco's cut corner. (F1, F2 and F3)
  • Not safeletters taller than half a cell, or a longer text in the border row. (B5, B6, B7 and B8)
  • Not safeany ink in the quiet zone, the white ring round the marker. (C1, C2, C3, C4, D3, D4 and E3)
  • Not safea ChArUco label near a chessboard corner. (E4)

Each line is checked against the run when this page is built: the build stops if a marker it names gets another verdict.

The board

28 markers, inkjet stickers on the Letter vinyl preset. Each varies one thing from the bare marker A1: where the label goes, how big it is, or the corner mark. The singles are DICT_4X4_50 markers, 22 mm on a 30 mm square; the ChArUco boards use DICT_4X4_100, so no two markers on the board print the same id. In the Studio each is an ArUco Extrude, numbered in this order.

A1B1B2B3B4B5B6B7B8B9C1C2C3C4D1D2D3D4D5D6D7E1E2E3E4F1F2F3
The board as it opens in the Studio: 28 markers, each on its own rectangle, drawn here by the Studio's core. The letters are the guide's names for them.

Every marker, and what the Studio says

Each marker gets 3 verdicts. The Studio's rules are the warnings it shows in the ArUco Extrude panel; they come from earlier, much larger studies (below). Verify is the Studio's simulated camera and OpenCV's own detector, reading the marker 320 times with its label and 320 times without, here with OpenCV 4.11 (the Studio's) and OpenCV 5.0. The Studio's own Verify runs OpenCV 4.11.0.86 in your browser (Pyodide). The detector matters: the two disagree on 6 of these markers (B5, B7, B8, C4, D4 and E4), so a place is safe only if it is safe on both. The verdict is the worst of them all.

The bare marker

No label and no corner mark: what every other marker is measured against.

A1No label, no corner mark#0 · ArUco Extrude 1

Safe

WhereNo label.

The Studio's rulesNo rule broken. Safe

Verify · OpenCV 4.11 (the Studio's)Reads in 214 of the 320 views: the baseline (the views run from easy to past reading). The dialog's angle sweep: to 80°. Safe

Verify · OpenCV 5.0Reads in 204 of the 320 views: the baseline (the views run from easy to past reading). The dialog's angle sweep: to 80°. Safe

On the marker: the black border row

Where a label goes when you turn it on: white letters knocked out of the marker's outer row of black cells, half a cell tall (Label › Place: On marker, Surface: Black).

B1Below#1 · ArUco Extrude 2

Safe

WhereOn marker, Surface Black, side Below · letters 1.83 mm tall (0.5 cell).

The Studio's rulesNo rule broken. Safe

Verify · OpenCV 4.11 (the Studio's)Lost 1 of the bare marker's 253 reads, gained 1. The dialog's angle sweep: to 80°. Safe

Verify · OpenCV 5.0Lost 1 of the bare marker's 243 reads (0.4 %). The dialog's angle sweep: to 80°. Safe

B2Above#2 · ArUco Extrude 3

Safe

WhereOn marker, Surface Black, side Above · letters 1.83 mm tall (0.5 cell).

The Studio's rulesNo rule broken. Safe

Verify · OpenCV 4.11 (the Studio's)Lost none of the bare marker's 262 reads, gained 1. The dialog's angle sweep: to 80°. Safe

Verify · OpenCV 5.0Lost none of the bare marker's 255 reads, gained 1. The dialog's angle sweep: to 80°. Safe

B3Left#3 · ArUco Extrude 4

Safe

WhereOn marker, Surface Black, side Left · letters 1.83 mm tall (0.5 cell).

The Studio's rulesNo rule broken. Safe

Verify · OpenCV 4.11 (the Studio's)Lost none of the bare marker's 268 reads, gained 3. The dialog's angle sweep: to 80°. Safe

Verify · OpenCV 5.0Lost none of the bare marker's 254 reads. The dialog's angle sweep: to 80°. Safe

B4Right#4 · ArUco Extrude 5

Safe

WhereOn marker, Surface Black, side Right · letters 1.83 mm tall (0.5 cell).

The Studio's rulesNo rule broken. Safe

Verify · OpenCV 4.11 (the Studio's)Lost none of the bare marker's 245 reads, gained 5. The dialog's angle sweep: to 75°. Safe

Verify · OpenCV 5.0Lost none of the bare marker's 235 reads, gained 3. The dialog's angle sweep: to 75°. Safe

B5Letters ¾ cell tall#5 · ArUco Extrude 6

Not safe

WhereOn marker, Surface Black, side Below · letters 2.75 mm tall (0.75 cell).

The Studio's rules2.75 mm letters are over the 1.83 mm the border row holds (a border row keeps a quarter module of black above and below its text, or the detector may miss it); the label's 1 line stand 2.75 mm, the border row holds 1.83 mm: the text runs out of it. Not safe

Verify · OpenCV 4.11 (the Studio's)Lost 69 of the bare marker's 245 reads (28.2 %); 31 of them in sharp, well-resolved views. The dialog's angle sweep: not even head on. Not safe

Verify · OpenCV 5.0Lost 2 of the bare marker's 246 reads (0.8 %). The dialog's angle sweep: to 80°. Safe

A view it lost with OpenCV 4.11 (the Studio's): 16 px per cell, blur 0.5 px, tilt 0°. Green: read; red: printed, not read.

B5 bare at 16 px per cell
Bare: reads
B5 marked at 16 px per cell
With the label: misses #5
0.511.522.5blur, px16 px/cell16 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−416 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−416 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−416 px per cell, blur 2.5 px: 5 of the 8 bare reads (8 views)−316 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−413 px/cell13 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−413 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−413 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−413 px per cell, blur 2.5 px: 7 of the 8 bare reads (8 views)−113 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)10 px/cell10 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−410 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−410 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)10 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)10 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)8 px/cell8 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−48 px per cell, blur 2.5 px: 5 of the 8 bare reads (8 views)−38 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)8 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)8 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)6 px/cell6 px per cell, blur 2.5 px: 3 of the 8 bare reads (8 views)−56 px per cell, blur 2.5 px: 6 of the 8 bare reads (8 views)−26 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)6 px per cell, blur 2.5 px: 6 of the 6 bare reads (8 views)6 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)5 px/cell5 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−45 px per cell, blur 2.5 px: 7 of the 8 bare reads (8 views)−15 px per cell, blur 2.5 px: 6 of the 6 bare reads (8 views)5 px per cell, blur 2.5 px: 1 of the 2 bare reads (8 views)−15 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)4 px/cell4 px per cell, blur 2.5 px: 7 of the 8 bare reads (8 views)−14 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)4 px per cell, blur 2.5 px: 2 of the 2 bare reads (8 views)4 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)4 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)3 px/cell3 px per cell, blur 2.5 px: 1 of the 8 bare reads (8 views)−73 px per cell, blur 2.5 px: 4 of the 5 bare reads (8 views)−13 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)3 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)3 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)

Where it lost them: red cells, by px per cell (rows) and blur (columns), 8 views each.

B6Letters a whole cell tall#6 · ArUco Extrude 7

Not safe

WhereOn marker, Surface Black, side Below · letters 3.67 mm tall (1 cell).

The Studio's rules3.67 mm letters are over the 1.83 mm the border row holds (a border row keeps a quarter module of black above and below its text, or the detector may miss it); the label's 1 line stand 3.67 mm, the border row holds 1.83 mm: the text runs out of it. Not safe

Verify · OpenCV 4.11 (the Studio's)Lost 60 of the bare marker's 243 reads, gained 3 (23.5 %); 25 of them in sharp, well-resolved views. The dialog's angle sweep: not even head on. Not safe

Verify · OpenCV 5.0Lost 11 of the bare marker's 235 reads (4.7 %); 10 of them in sharp, well-resolved views. The dialog's angle sweep: to 75°. Not safe

A view it lost with OpenCV 4.11 (the Studio's): 16 px per cell, blur 0.5 px, tilt 0°. Green: read; red: printed, not read.

B6 bare at 16 px per cell
Bare: reads
B6 marked at 16 px per cell
With the label: misses #6
0.511.522.5blur, px16 px/cell16 px per cell, blur 2.5 px: 0 of the 8 bare reads (8 views)−816 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−416 px per cell, blur 2.5 px: 5 of the 8 bare reads (8 views)−316 px per cell, blur 2.5 px: 7 of the 8 bare reads (8 views)−116 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)13 px/cell13 px per cell, blur 2.5 px: 0 of the 8 bare reads (8 views)−813 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)13 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)13 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)13 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)10 px/cell10 px per cell, blur 2.5 px: 7 of the 8 bare reads (8 views)−110 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)10 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)10 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)10 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)8 px/cell8 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−48 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)8 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)8 px per cell, blur 2.5 px: 6 of the 6 bare reads (8 views)8 px per cell, blur 2.5 px: 5 of the 5 bare reads (8 views)6 px/cell6 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)6 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)6 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)6 px per cell, blur 2.5 px: 4 of the 4 bare reads (8 views)6 px per cell, blur 2.5 px: 0 of the 1 bare reads (8 views)−15 px/cell5 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)5 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)5 px per cell, blur 2.5 px: 7 of the 5 bare reads (8 views)5 px per cell, blur 2.5 px: 2 of the 1 bare reads (8 views)5 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)4 px/cell4 px per cell, blur 2.5 px: 0 of the 8 bare reads (8 views)−84 px per cell, blur 2.5 px: 0 of the 8 bare reads (8 views)−84 px per cell, blur 2.5 px: 0 of the 5 bare reads (8 views)−54 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)4 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)3 px/cell3 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−43 px per cell, blur 2.5 px: 3 of the 8 bare reads (8 views)−53 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)3 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)3 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)

Where it lost them: red cells, by px per cell (rows) and blur (columns), 8 views each.

B7Longer text: “#{ids} {dict}”#7 · ArUco Extrude 8

Not safe

WhereOn marker, Surface Black, side Below · letters 1.83 mm tall (0.5 cell).

The Studio's rulesNo rule broken. Safe

Verify · OpenCV 4.11 (the Studio's)Lost 14 of the bare marker's 267 reads, gained 6 (3 %); 5 of them in sharp, well-resolved views. The dialog's angle sweep: to 80°. Not safe

Verify · OpenCV 5.0Lost 9 of the bare marker's 258 reads, gained 5 (1.6 %). The dialog's angle sweep: to 80°. Safe

A view it lost with OpenCV 4.11 (the Studio's): 13 px per cell, blur 2.5 px, tilt 0°. Green: read; red: printed, not read.

B7 bare at 13 px per cell
Bare: reads
B7 marked at 13 px per cell
With the label: misses #7
0.511.522.5blur, px16 px/cell16 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)16 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)16 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)16 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)16 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)13 px/cell13 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)13 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)13 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)13 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)13 px per cell, blur 2.5 px: 6 of the 8 bare reads (8 views)−210 px/cell10 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)10 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)10 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)10 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)10 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)8 px/cell8 px per cell, blur 2.5 px: 7 of the 8 bare reads (8 views)−18 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−48 px per cell, blur 2.5 px: 7 of the 8 bare reads (8 views)−18 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)8 px per cell, blur 2.5 px: 7 of the 8 bare reads (8 views)−16 px/cell6 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)6 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)6 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)6 px per cell, blur 2.5 px: 8 of the 6 bare reads (8 views)6 px per cell, blur 2.5 px: 5 of the 4 bare reads (8 views)5 px/cell5 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)5 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)5 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)5 px per cell, blur 2.5 px: 5 of the 5 bare reads (8 views)5 px per cell, blur 2.5 px: 2 of the 2 bare reads (8 views)4 px/cell4 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)4 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)4 px per cell, blur 2.5 px: 6 of the 7 bare reads (8 views)−14 px per cell, blur 2.5 px: 2 of the 2 bare reads (8 views)4 px per cell, blur 2.5 px: 1 of the 0 bare reads (8 views)3 px/cell3 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)3 px per cell, blur 2.5 px: 6 of the 7 bare reads (8 views)−13 px per cell, blur 2.5 px: 1 of the 2 bare reads (8 views)−13 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)3 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)

Where it lost them: red cells, by px per cell (rows) and blur (columns), 8 views each.

B8Text longer than the row: “#{ids} {dict} {type}”#8 · ArUco Extrude 9

Not safe

WhereOn marker, Surface Black, side Below · letters 1.83 mm tall (0.5 cell).

The Studio's rulesthe label is 7.3 mm longer than the border row holds. Not safe

Verify · OpenCV 4.11 (the Studio's)Lost 6 of the bare marker's 234 reads, gained 1 (2.1 %). The dialog's angle sweep: to 75°. Safe

Verify · OpenCV 5.0Lost 4 of the bare marker's 234 reads (1.7 %). Where the bare pose is sharp (13 views) the pose came out worse in 13 and better in 0: 0.549 mm mean error against 0.194 mm bare. The dialog's angle sweep: to 75°. Not safe

B9Moved up one cell, onto the data cells#9 · ArUco Extrude 10

Safe

WhereOn marker, Surface Black, side Below · letters 1.83 mm tall (0.5 cell) · moved 0, 3.67 mm.

The Studio's rulesNo rule broken. Safe

Verify · OpenCV 4.11 (the Studio's)Lost none of the bare marker's 239 reads. The dialog's angle sweep: to 80°. Safe

Verify · OpenCV 5.0Lost none of the bare marker's 234 reads. The dialog's angle sweep: to 80°. Safe

On the marker: the quiet zone

Black letters in the white ring round the marker (Surface: White).

C1Below#10 · ArUco Extrude 11

Not safe

WhereOn marker, Surface White, side Below · letters 1.83 mm tall (0.5 cell) · 0.25 cell from the black.

The Studio's rulesblack text in the quiet zone: any ink in the white ring round the black costs the detector (core.label's study: about 11 points of reads for a grey id, up to 40 once the dots spread). Not safe

Verify · OpenCV 4.11 (the Studio's)Lost 1 of the bare marker's 275 reads, gained 1. The dialog's angle sweep: to 80°. Safe

Verify · OpenCV 5.0Lost 2 of the bare marker's 259 reads, gained 2. The dialog's angle sweep: to 80°. Safe

C2Above#11 · ArUco Extrude 12

Not safe

WhereOn marker, Surface White, side Above · letters 1.83 mm tall (0.5 cell) · 0.25 cell from the black.

The Studio's rulesblack text in the quiet zone: any ink in the white ring round the black costs the detector (core.label's study: about 11 points of reads for a grey id, up to 40 once the dots spread). Not safe

Verify · OpenCV 4.11 (the Studio's)Lost 1 of the bare marker's 251 reads, gained 2. The dialog's angle sweep: to 80°. Safe

Verify · OpenCV 5.0Lost none of the bare marker's 235 reads, gained 2. The dialog's angle sweep: to 80°. Safe

C3Left#12 · ArUco Extrude 13

Not safe

WhereOn marker, Surface White, side Left · letters 1.83 mm tall (0.5 cell) · 0.25 cell from the black.

The Studio's rulesblack text in the quiet zone: any ink in the white ring round the black costs the detector (core.label's study: about 11 points of reads for a grey id, up to 40 once the dots spread). Not safe

Verify · OpenCV 4.11 (the Studio's)Lost none of the bare marker's 228 reads, gained 1. The dialog's angle sweep: to 80°. Safe

Verify · OpenCV 5.0Lost none of the bare marker's 218 reads. The dialog's angle sweep: to 80°. Safe

C4Right#13 · ArUco Extrude 14

Not safe

WhereOn marker, Surface White, side Right · letters 1.83 mm tall (0.5 cell) · 0.25 cell from the black.

The Studio's rulesblack text in the quiet zone: any ink in the white ring round the black costs the detector (core.label's study: about 11 points of reads for a grey id, up to 40 once the dots spread). Not safe

Verify · OpenCV 4.11 (the Studio's)Lost 6 of the bare marker's 268 reads (2.2 %). The dialog's angle sweep: to 80°. Marginal

Verify · OpenCV 5.0Lost 1 of the bare marker's 253 reads, gained 1. The dialog's angle sweep: to 80°. Safe

A view it lost with OpenCV 4.11 (the Studio's): 6 px per cell, blur 0.5 px, tilt 45°. Green: read; red: printed, not read.

C4 bare at 6 px per cell
Bare: reads
C4 marked at 6 px per cell
With the label: misses #13
0.511.522.5blur, px16 px/cell16 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)16 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)16 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)16 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)16 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)13 px/cell13 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)13 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)13 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)13 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)13 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)10 px/cell10 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)10 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)10 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)10 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)10 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)8 px/cell8 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)8 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)8 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)8 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)8 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)6 px/cell6 px per cell, blur 2.5 px: 6 of the 8 bare reads (8 views)−26 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)6 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)6 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)6 px per cell, blur 2.5 px: 4 of the 4 bare reads (8 views)5 px/cell5 px per cell, blur 2.5 px: 6 of the 8 bare reads (8 views)−25 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)5 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)5 px per cell, blur 2.5 px: 4 of the 4 bare reads (8 views)5 px per cell, blur 2.5 px: 3 of the 3 bare reads (8 views)4 px/cell4 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)4 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)4 px per cell, blur 2.5 px: 5 of the 5 bare reads (8 views)4 px per cell, blur 2.5 px: 1 of the 2 bare reads (8 views)−14 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)3 px/cell3 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)3 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)3 px per cell, blur 2.5 px: 1 of the 2 bare reads (8 views)−13 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)3 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)

Where it lost them: red cells, by px per cell (rows) and blur (columns), 8 views each.

Outside the marker

The label in its own band of the rectangle (Place: Outside), Gap away from the quiet zone; a negative Gap pushes the band over it.

D1Below, Gap 2 mm (the default)#14 · ArUco Extrude 15

Safe

WhereOutside, side Below · Gap 2 mm · letters 3.67 mm tall (1 cell) · 1.55 cell from the black.

The Studio's rulesNo rule broken. Safe

Verify · OpenCV 4.11 (the Studio's)Lost 2 of the bare marker's 233 reads, gained 2. The dialog's angle sweep: to 80°. Safe

Verify · OpenCV 5.0Lost none of the bare marker's 216 reads. The dialog's angle sweep: to 80°. Safe

D2Below, Gap 0: touching the quiet zone#15 · ArUco Extrude 16

Safe

WhereOutside, side Below · Gap 0 mm · letters 3.67 mm tall (1 cell) · 1 cell from the black.

The Studio's rulesNo rule broken. Safe

Verify · OpenCV 4.11 (the Studio's)Lost none of the bare marker's 250 reads, gained 4. The dialog's angle sweep: to 80°. Safe

Verify · OpenCV 5.0Lost 2 of the bare marker's 243 reads, gained 1 (0.4 %). The dialog's angle sweep: to 80°. Safe

D3Below, Gap −½ cell: half way into the quiet zone#16 · ArUco Extrude 17

Not safe

WhereOutside, side Below · Gap −1.83 mm · letters 3.67 mm tall (1 cell) · 0.5 cell from the black.

The Studio's rulesa gap of -1.83333 mm: the label's band overlaps the marker's box by 1.83333 mm. Not safe

Verify · OpenCV 4.11 (the Studio's)Lost 7 of the bare marker's 269 reads, gained 2 (1.9 %). The dialog's angle sweep: to 80°. Safe

Verify · OpenCV 5.0Lost none of the bare marker's 253 reads, gained 1. The dialog's angle sweep: to 80°. Safe

D4Below, Gap −1 cell: touching the black#17 · ArUco Extrude 18

Not safe

WhereOutside, side Below · Gap −3.67 mm · letters 3.67 mm tall (1 cell) · touching the black.

The Studio's rulesa gap of -3.66667 mm: the label's band overlaps the marker's box by 3.66667 mm. Not safe

Verify · OpenCV 4.11 (the Studio's)Lost 186 of the bare marker's 271 reads, gained 2 (67.9 %); 28 of them in sharp, well-resolved views. The dialog's angle sweep: to 70°. Not safe

Verify · OpenCV 5.0Lost none of the bare marker's 247 reads, gained 5. The dialog's angle sweep: to 80°. Safe

A view it lost with OpenCV 4.11 (the Studio's): 16 px per cell, blur 1 px, tilt 45°. Green: read; red: printed, not read.

D4 bare at 16 px per cell
Bare: reads
D4 marked at 16 px per cell
With the label: misses #17
0.511.522.5blur, px16 px/cell16 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)16 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−416 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−416 px per cell, blur 2.5 px: 0 of the 8 bare reads (8 views)−816 px per cell, blur 2.5 px: 3 of the 8 bare reads (8 views)−513 px/cell13 px per cell, blur 2.5 px: 8 of the 8 bare reads (8 views)13 px per cell, blur 2.5 px: 1 of the 8 bare reads (8 views)−713 px per cell, blur 2.5 px: 0 of the 8 bare reads (8 views)−813 px per cell, blur 2.5 px: 2 of the 8 bare reads (8 views)−613 px per cell, blur 2.5 px: 3 of the 8 bare reads (8 views)−510 px/cell10 px per cell, blur 2.5 px: 6 of the 8 bare reads (8 views)−210 px per cell, blur 2.5 px: 0 of the 8 bare reads (8 views)−810 px per cell, blur 2.5 px: 1 of the 8 bare reads (8 views)−710 px per cell, blur 2.5 px: 3 of the 8 bare reads (8 views)−510 px per cell, blur 2.5 px: 3 of the 8 bare reads (8 views)−58 px/cell8 px per cell, blur 2.5 px: 6 of the 8 bare reads (8 views)−28 px per cell, blur 2.5 px: 3 of the 8 bare reads (8 views)−58 px per cell, blur 2.5 px: 0 of the 8 bare reads (8 views)−88 px per cell, blur 2.5 px: 0 of the 8 bare reads (8 views)−88 px per cell, blur 2.5 px: 0 of the 8 bare reads (8 views)−86 px/cell6 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−46 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−46 px per cell, blur 2.5 px: 1 of the 8 bare reads (8 views)−76 px per cell, blur 2.5 px: 2 of the 8 bare reads (8 views)−66 px per cell, blur 2.5 px: 3 of the 5 bare reads (8 views)−25 px/cell5 px per cell, blur 2.5 px: 4 of the 8 bare reads (8 views)−45 px per cell, blur 2.5 px: 1 of the 8 bare reads (8 views)−75 px per cell, blur 2.5 px: 1 of the 8 bare reads (8 views)−75 px per cell, blur 2.5 px: 2 of the 5 bare reads (8 views)−35 px per cell, blur 2.5 px: 1 of the 1 bare reads (8 views)4 px/cell4 px per cell, blur 2.5 px: 0 of the 8 bare reads (8 views)−84 px per cell, blur 2.5 px: 0 of the 8 bare reads (8 views)−84 px per cell, blur 2.5 px: 0 of the 4 bare reads (8 views)−44 px per cell, blur 2.5 px: 0 of the 4 bare reads (8 views)−44 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)3 px/cell3 px per cell, blur 2.5 px: 6 of the 8 bare reads (8 views)−23 px per cell, blur 2.5 px: 1 of the 8 bare reads (8 views)−73 px per cell, blur 2.5 px: 2 of the 4 bare reads (8 views)−23 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)3 px per cell, blur 2.5 px: 0 of the 0 bare reads (8 views)

Where it lost them: red cells, by px per cell (rows) and blur (columns), 8 views each.

D5Above, Gap 2 mm#18 · ArUco Extrude 19

Safe

WhereOutside, side Above · Gap 2 mm · letters 3.67 mm tall (1 cell) · 1.85 cell from the black.

The Studio's rulesNo rule broken. Safe

Verify · OpenCV 4.11 (the Studio's)Lost none of the bare marker's 256 reads, gained 1. The dialog's angle sweep: to 80°. Safe

Verify · OpenCV 5.0Lost none of the bare marker's 252 reads, gained 1. The dialog's angle sweep: to 80°. Safe

D6Left, Gap 2 mm#19 · ArUco Extrude 20

Safe

WhereOutside, side Left · Gap 2 mm · letters 3.67 mm tall (1 cell) · 1.55 cell from the black.

The Studio's rulesNo rule broken. Safe

Verify · OpenCV 4.11 (the Studio's)Lost none of the bare marker's 242 reads. The dialog's angle sweep: to 75°. Safe

Verify · OpenCV 5.0Lost none of the bare marker's 235 reads. The dialog's angle sweep: to 75°. Safe

D7Right, Gap 2 mm#20 · ArUco Extrude 21

Safe

WhereOutside, side Right · Gap 2 mm · letters 3.67 mm tall (1 cell) · 1.55 cell from the black.

The Studio's rulesNo rule broken. Safe

Verify · OpenCV 4.11 (the Studio's)Lost 2 of the bare marker's 259 reads, gained 2. The dialog's angle sweep: to 80°. Safe

Verify · OpenCV 5.0Lost none of the bare marker's 238 reads. The dialog's angle sweep: to 80°. Safe

Grids and ChArUco boards

A grid's label goes in the border row of its edge marker nearest the middle; a ChArUco board's in a black square of its edge row.

E1Grid 2 × 2: in its border row#21–24 · ArUco Extrude 22

Safe

WhereOn marker, Surface Black, side Below · letters 1.96 mm tall (0.5 cell).

The Studio's rulesNo rule broken. Safe

Verify · OpenCV 4.11 (the Studio's)Lost 7 of the bare marker's 1041 reads, gained 4 (0.3 %); 1 of them in sharp, well-resolved views. The dialog's angle sweep: to 75°. Safe

Verify · OpenCV 5.0Lost none of the bare marker's 1029 reads, gained 1. The dialog's angle sweep: to 75°. Safe

E2ChArUco 5 × 4: in a black square#50–59 · ArUco Extrude 23

Safe

WhereOn marker, Surface Black, side Below · letters 1.5 mm tall (1 cell).

The Studio's rulesNo rule broken. Safe

Verify · OpenCV 4.11 (the Studio's)Lost none of the bare marker's 2479 reads. The dialog's angle sweep: to 75°. Safe

Verify · OpenCV 5.0Lost none of the bare marker's 2387 reads. The dialog's angle sweep: to 75°. Safe

E3ChArUco 5 × 4: in a white square's margin#60–69 · ArUco Extrude 24

Not safe

WhereOn marker, Surface White, side Below · letters 0.75 mm tall (0.5 cell).

The Studio's rulesblack text in the quiet zone: any ink in the white ring round the black costs the detector (core.label's study: about 11 points of reads for a grey id, up to 40 once the dots spread). Not safe

Verify · OpenCV 4.11 (the Studio's)Lost 4 of the bare marker's 2492 reads, gained 3 (0 %). The dialog's angle sweep: to 75°. Safe

Verify · OpenCV 5.0Lost none of the bare marker's 2417 reads, gained 5. The dialog's angle sweep: to 75°. Safe

E4ChArUco 5 × 4: moved toward a chessboard corner#70–79 · ArUco Extrude 25

Not safe

WhereOn marker, Surface Black, side Below · letters 1.5 mm tall (1 cell) · moved 3.5, 3.5 mm.

The Studio's rulesthe label comes within 1.75 mm of a chessboard corner (the detector refines them: keep 0.3 square, 3.60 mm, clear). Not safe

Verify · OpenCV 4.11 (the Studio's)Lost 3 of the bare marker's 2520 reads, gained 3. The dialog's angle sweep: to 75°. Safe

Verify · OpenCV 5.0Lost 1 of the bare marker's 2445 reads, gained 1. Where the bare pose is sharp (178 views) the pose came out worse in 86 and better in 32: 0.081 mm mean error against 0.048 mm bare. The dialog's angle sweep: to 75°. Marginal

Corner marks

Corner mark › Black triangle (labels off). On a ChArUco board, whose top-left square is black, the Studio cuts that square's outer corner instead.

F1Single: black triangle#25 · ArUco Extrude 26

Safe

WhereNo label.

The Studio's rulesNo rule broken. Safe

Verify · OpenCV 4.11 (the Studio's)Lost none of the bare marker's 263 reads, gained 3. The dialog's angle sweep: to 75°. Safe

Verify · OpenCV 5.0Lost 2 of the bare marker's 254 reads, gained 3. The dialog's angle sweep: to 75°. Safe

F2Grid 2 × 2: black triangle#26–29 · ArUco Extrude 27

Safe

WhereNo label.

The Studio's rulesNo rule broken. Safe

Verify · OpenCV 4.11 (the Studio's)Lost 1 of the bare marker's 978 reads, gained 4. The dialog's angle sweep: to 75°. Safe

Verify · OpenCV 5.0Lost 2 of the bare marker's 945 reads, gained 3. The dialog's angle sweep: to 75°. Safe

F3ChArUco 5 × 4: the black square's corner cut#80–89 · ArUco Extrude 28

Safe

WhereNo label.

The Studio's rulesNo rule broken. Safe

Verify · OpenCV 4.11 (the Studio's)Lost none of the bare marker's 2507 reads. The dialog's angle sweep: to 75°. Safe

Verify · OpenCV 5.0Lost none of the bare marker's 2454 reads. The dialog's angle sweep: to 75°. Safe

How Verify measured it

The same marker, read twice through the same 320 views: as planned, and bare, with its label and corner mark taken away. Both views share the camera, the crop, the blur and the grain, pixel for pixel, so a read the bare marker gets and the labelled one does not is the label's doing. A read is one marker id in one view, so a grid or a ChArUco board counts each of its markers. The views cover 3 to 16 px per cell on the sensor (from the edge of reading to Verify's bench), 0.5 to 2.5 px of blur, head on and tilted 45°, grain 0.1, 4 seeds each.

  • Safe: it loses under 1 % of the bare marker's reads, or a sign test cannot tell the loss from chance (p ≥ 0.05).
  • Marginal: a real loss under 5 %, or, where the bare pose is sharp, a mean pose error 20 % or more worse.
  • Not safe: a loss of 5 % or more; or 2 % or more of the reads in the easy views (8 px per cell or more, 1 px of blur or less, where a bare marker never fails), 2 at least; or the pose 100 % worse.

Why not just Verify's dialog? It shows one view at a time, a clean angle sweep and a head-on read limit. With OpenCV 4.11 (the Studio's) the sweep shows B5 and B6 not reading even head on; D4 reading only to 70° (its bare marker to 80°). The other 9 of the 12 markers this page calls not safe or marginal sweep exactly like their bare marker (B7, B8, C1, C2, C3, C4, D3, E3 and E4). With OpenCV 5.0 the sweep shows nothing: 12 of the 12 markers this page calls not safe or marginal sweep exactly like their bare marker (B5, B6, B7, B8, C1, C2, C3, C4, D3, D4, E3 and E4). The dialog catches the worst places; the paired check measures the rest. It is aruco_studio/web_marks.py, version 1.

What Verify cannot judge yet

Verify found a cost for 7 of these markers (B5, B6, B7, B8, C4, D4 and E4); the rules flag 11. Where only the rules flag a marker (C1, C2, C3, D3 and E3), Verify saw no cost on either detector. Two things the studies behind those rules measured, Verify does not draw, and one more it leaves out:

  • Ink spread. A printer's dots grow into the white round them, so ink in the quiet zone creeps toward the marker's black; the studies measured up to −40 points once it did. Verify draws ink at its exact size.
  • Grey ink. The studies' −11 points in the quiet ring were grey ids; Verify draws the label black, in OpenCV's thin Hershey font stretched to the print's Helvetica widths.
  • What is round the sticker. Verify draws white past the sticker's edge. On a dark part the quiet zone is all the white there is, and black letters in it can join the black border to the dark background.

So treat Verify's “no loss” in the quiet zone as no evidence it is safe on paper; the rule stays. The test Verify cannot do is yours: Print the board, stick it where your markers will go, and read it with your camera.

Where the rules come from

The rules came out of the studies behind the ArUco Extrude add-in, in October 2026: 430,260 simulated photos for the label, 298,000 for the corner mark, on OpenCV's detector. Their numbers are kept in the core, next to the rules they set: core/label.py and core/chamfer.py.

  • White letters knocked out of the black border row cost nothing (−0.3 points, not significant) while they are at most half a cell tall, keep a quarter cell of black above and below, and stay out of the corner cells.
  • Any ink in the 1-cell quiet ring costs: −11 points for a grey id, up to −40 once a printer's dots spread.
  • Black text on the white: 0.5 cell from the black cost −7.3 points, 0.7 cell −1.5 points, a whole cell or more: nothing (3,000 paired trials). That is the quiet ring's own edge, so the quiet ring is the rule.
  • A ChArUco board's label fits in a black square for free; a bright mark nearer than 0.3 of a square to an inner chessboard corner pulls that corner.
  • Corner marks: a black triangle in the quiet zone's corner, the white tile's corner cut, and a ChArUco board's top-left black square's outer corner cut cost nothing. Cutting the marker's own black corner is never done: corner 0 slides along the cut.

Check it yourself

  1. Open the board in the Studio.
  2. Click a marker, then Verify (K). Drag Tilt and Blur; pick another marker from the list.
  3. Click a marker to open its ArUco Extrude panel: the Label tab shows the rule warnings this page quotes.
  4. Print it from the Studio (Print, at 100 %), stick it where your markers will go, and read it with your camera.

Built 2026-10-21 from core 0.1.0 (commit 03cd721), with OpenCV 4.11.0 (Python 3.11.15, numpy 1.26.4, 152 s); OpenCV 5.0.0 (Python 3.11.15, numpy 2.3.5, 173 s). The raw run: verify.json.