Overview

Visualizes the anchor points used by the trigger strategy system to determine if detections are within zones or crossing lines. Each anchor point is drawn as a small filled circle at the calculated position on the bounding box. Supports drawing individual anchor points or multiple points simultaneously.

Function Signature

anchors(
    image: np.ndarray,
    detections: Detections,
    strategy: Union[str, List[str]], optional = None,
    radius: Optional[int] = None,
    thickness: Optional[int] = None,
    colors: Optional[List[tuple]] = None
) -> np.ndarray

Parameters

image
np.ndarray
required
Input image to draw anchor points on in BGR format. Image is modified in-place.
detections
Detections
required
Detection results containing bounding boxes. Each detection must have a ‘bbox’ attribute with (x1, y1, x2, y2) coordinates.
strategy
Union[str, List[str]], optional
default:"None"
Strategy for determining anchor points to draw. Single string: “center”, “bottom_center”, “top_left”, etc. List of strings: Multiple anchor points. None draws all 9 main anchor points (center, corners, edge centers).
radius
Optional[int]
default:"None"
Radius of anchor point circles in pixels. If None, automatically scaled based on image size (minimum 2 pixels).
thickness
Optional[int]
default:"None"
Thickness of circle outline in pixels. Use -1 for filled circles. If None, defaults to -1 (filled).
colors
Optional[List[tuple]]
default:"None"
List of BGR color tuples for custom colors. Colors mapped to unique class_ids in order of appearance. If None, uses default ColorManager colors.

Returns

result
np.ndarray
Image with anchor points drawn. The input image is modified in-place.

Examples

import cv2
import pixelflow as pf
from ultralytics import YOLO

# Load image and get detections
image = cv2.imread("path/to/image.jpg")
model = YOLO("yolo11n.pt")
outputs = model.predict(image)
detections = pf.results.from_ultralytics(outputs)

# Draw all main anchor points (default)
annotated = pf.annotators.anchors(image, detections)

# Draw bottom center points (useful for ground-based tracking)
annotated = pf.annotators.anchors(image, detections, strategy="bottom_center")

# Draw multiple specific anchor points
corners = ["top_left", "top_right", "bottom_left", "bottom_right"]
annotated = pf.annotators.anchors(image, detections, strategy=corners)

# Custom styling with larger green circles
annotated = pf.annotators.anchors(

Error Handling

This function may raise the following exceptions:
  • AttributeError: If detections don’t have required ‘bbox’ attribute.
  • ValueError: If invalid strategy string is provided.

Notes

  • Anchor points are calculated using the get_anchor_position function from strategies module
  • Invalid anchor strategies are skipped gracefully to prevent errors
  • Radius is automatically scaled with image size if not specified
  • All 9 anchor points include: center, 4 corners, and 4 edge centers
  • Colors are applied consistently across detections with the same class_id