annotate_table — ANNOTATE paper op

• Data kinds: image2d × text → image2d

• Call: import fullseye as fs; fs.ledger.annotate_table(img, text, xy, anchor='lt', font_size=13, color='neutral', text_color=None, box_color=None, box_alpha=0.72, pad=6, col_gap=None, row_gap=0, align='auto', header=False, grid=False, border=0, border_color=None, font_path=None, scheme='okabe_ito', min_contrast=2.0, bold=False, italic=False, line_spacing=1.15, style=None, layout=None) (to call the implementation directly, import annotate; annotate.annotate_table(img, text, xy, anchor='lt', font_size=13, color='neutral', text_color=None, box_color=None, box_alpha=0.72, pad=6, col_gap=None, row_gap=0, align='auto', header=False, grid=False, border=0, border_color=None, font_path=None, scheme='okabe_ito', min_contrast=2.0, bold=False, italic=False, line_spacing=1.15, style=None, layout=None); from the registry, opsannotate.get("annotate_table"))

Usage

Returns an image (image2d): draws a tab-separated string as a table (with a semi-transparent backing panel).

Column widths are determined by annotate_table_layout, measuring with the real font. The default column gap is 0.6 times the row height, so changing font_size moves the spacing along with it. The backing panel is translucent by default (box_alpha=0.72; 0 means no panel).

Parameters

box_alpha : float

Opacity of the panel [0,1]. 0 draws no panel. When translucent, the picture beneath

shows through, so the text colour is checked against "the colour actually underneath".

grid : bool

If true, faint rules are drawn at column and row boundaries. The default draws none (a table without rules

is often easier to read; add them only when needed).

header : bool

If true, the 1st row is made bold and 1 rule is drawn below it.

align : str or sequence

TABLE_ALIGNS. The default "auto" right-aligns only numeric columns.

layout : dict or None

Passing the return value of annotate_table_layout skips recomputation.

If passed, anchor and the like are ignored (do not pass both).

Returns

(H,W[,C]) float64

A copy with the table drawn. The input is not modified.

Raises

ValueError

Same as annotate_table_layout + the table extends beyond the image +

text falls below min_contrast against its background (never silently clipped).

Examples

>>> import numpy as np, annotate

>>> img = np.zeros((120, 260, 3))

>>> out = annotate.annotate_table(img, "Item\tValue\nArea\t12.5\nPerimeter\t9.75",

... (10, 10), header=True)

>>> out.shape

(120, 260, 3)

>>> float(np.abs(out - img).max()) > 0.1

True

Detailed usage guide

• figure_annotation family guide

Background guides (the physics and conventions behind this op)

• dataset_conventions — Training-dataset conventions — COCO / YOLO / VOC and pitfalls in visual inspection

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• annotate_paper_tour — py -3.11 examples/annotate_paper_tour.py

• poc_rotation_invariance_audit — py -3.11 examples/poc_rotation_invariance_audit.py

Ops the type connects to (they accept image2d as input)

text_box · arrow · leader_line · label_points · crosshair · legend_box · color_bar · scale_bar

Same category (paper)

annotate_leader_layout · annotate_leader · annotate_markers · annotate_legend · annotate_dimension_layout · annotate_dimension · annotate_angle_layout · annotate_angle


*Provenance: annotate.py — ANNOTATE operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.