Skip to main content

bbox-visualizer

Documentation Status Test License: MIT Ruff PyPI version Downloads

This package helps users draw bounding boxes around objects, without doing the clumsy math that you'd need to do for positioning the labels. It also has a few different types of visualizations you can use for labeling objects after identifying them.

By default the bounding box points are expected in Pascal VOC format: (xmin, ymin, xmax, ymax). COCO and YOLO formats are also supported via the bbox_format keyword argument (see Bounding box formats).

Installation:

pip install bbox-visualizer

Quick Start

A complete example that loads an image, draws a labeled bounding box, and saves the result:

import cv2
import bbox_visualizer as bbv

img = cv2.imread("path/to/image.jpg")

# Bounding boxes use [x_min, y_min, x_max, y_max]
bbox = [150, 100, 450, 300]
label = "person"

img = bbv.draw_box(img, bbox, bbox_color=(0, 255, 0))
img = bbv.add_label(img, label, bbox)

cv2.imwrite("output.jpg", img)

All functions return a new image and never modify the input image, so keep the return value (as above) rather than relying on in-place changes.

For multiple objects, use the _multiple_ variants with parallel lists:

bboxes = [[150, 100, 450, 300], [500, 50, 700, 250]]
labels = ["person", "dog"]

img = bbv.draw_multiple_boxes(img, bboxes)
img = bbv.add_multiple_labels(img, labels, bboxes)

draw_multiple_boxes also accepts one color per box:

img = bbv.draw_multiple_boxes(img, bboxes, bbox_color=[(0, 255, 0), (0, 0, 255)])

The library logs fallback warnings (e.g., when a label doesn't fit) through Python's logging module. To silence them:

import logging

logging.getLogger("bbox_visualizer").setLevel(logging.ERROR)

Bounding box formats

Every drawing function accepts a bbox_format keyword argument. The default is Pascal VOC.

bbox_format Coordinates Scale
"voc" (default) [x_min, y_min, x_max, y_max] absolute pixels
"coco" [x_min, y_min, width, height] absolute pixels
"yolo" [x_center, y_center, width, height] normalized to [0, 1]
# COCO format: [x_min, y_min, width, height]
img = bbv.draw_box(img, [150, 100, 300, 200], bbox_format="coco")

# YOLO format: [x_center, y_center, width, height], normalized to [0, 1].
# Image dimensions are read from the image, so no extra arguments are needed.
img = bbv.draw_box(img, [0.5, 0.4, 0.3, 0.25], bbox_format="yolo")

# Works with the multiple-object variants too
img = bbv.draw_multiple_boxes(img, coco_bboxes, bbox_format="coco")

Internally all formats are converted to Pascal VOC before drawing.

Runnable scripts live in examples/:

  • quickstart.py — minimal example on a blank canvas
  • single_object.py — every single-object label style
  • multiple_objects.py — every multi-object label style
  • label_stress.py — awkward label strings through every style, for eyeballing label layout

cover

Photos by Joshua Earle, Jonas Weckschmied and Sherzod Max on Unsplash.

image function
bbox with label on top img = bbv.draw_box(img, bbox)
img = bbv.add_label(img, label, bbox, top=True)
bbox with T label img = bbv.draw_box(img, bbox)
img = bbv.add_T_label(img, label, bbox)
label with flag img = bbv.draw_flag_with_label(img, label, bbox)
bbox with label inside img = bbv.draw_box(img, bbox)
img = bbv.add_label(img, label, bbox, top=False)
label with opaque overlay img = bbv.draw_box(image, bbox, is_opaque=True)
img = bbv.add_label(img, label, bbox, draw_bg=False, top=False)
multiple bbox img = bbv.draw_multiple_boxes(img, bboxes)
img = bbv.add_multiple_labels(img, labels, bboxes)
multiple flags img = bbv.draw_multiple_flags_with_labels(img, labels, bboxes)
multiple T bbox img = bbv.draw_multiple_boxes(img, bboxes)
img = bbv.add_multiple_T_labels(img, labels, bboxes)

Note: The functions draw_rectangle and draw_multiple_rectangles are also available as aliases for draw_box and draw_multiple_boxes respectively. Both naming conventions work identically.

Tip: The draw_multiple_* and add_multiple_* functions are convenience helpers. For full control over your visualizations, call the single-box functions (draw_box, add_label, etc.) in a loop instead.

Release files for bbox-visualizer 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bbox-visualizer 1.0.1
File Size Uploaded
bbox_visualizer-1.0.1.tar.gz 11.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bbox-visualizer 1.0.1
File Interpreter ABI Platform
bbox_visualizer-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 25.2 kB

Release files / bbox_visualizer-1.0.1.tar.gz

Download URL bbox_visualizer-1.0.1.tar.gz
Size 11.4 kB
Tags Source
SHA-256 checksum
How to use checksums
7216e5582d0f214c31dbf47b91354924c6f80b41ed52458a43fb5d4c30f4104a
BLAKE2b-256 checksum
How to use checksums
fb7a88965f56ddd45782cd7026cdbc8a7131ff2d99d93ee26ab7445d7c99bfe0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 17, 2026.

Transparency log

Release files / bbox_visualizer-1.0.1-py3-none-any.whl

Download URL bbox_visualizer-1.0.1-py3-none-any.whl
Size 13.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b24af917d785aae0657703933f380d66d9da5daee9e4a9d0b0cfc08f98715bdc
BLAKE2b-256 checksum
How to use checksums
6b64ff2f6153671b08d99f6d5b48a728edc14726711a4bd6e5fc796c41f5b812
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 17, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

1.0.0

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page