Skip to main content

Python API Reference

This Page Was Not Auto-Generated

These docs have not been automatically generated from doc strings, so they are likely to drift slightly from the actual API.

#477 tracks this issue.

All functions are exposed via the img2num Python package. They accept NumPy arrays and automatically inject width/height from the array shape — you do not pass these yourself.

Input images must be RGBA

The core library operates on 4-channel RGBA buffers. Convert your image before calling any function, e.g. with OpenCV:

import cv2

img = cv2.imread("input.png")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGBA) # VERY IMPORTANT

image_to_svg(image, *, config=None)

Full raster → SVG pipeline (bilateral filter → k-means → contour tracing).

Parameters:

NameTypeDescription
imageNDArray[np.uint8]Input image of shape (H, W, 4) (RGBA).
configImageToSvgConfigOptional configuration. Defaults are used if omitted.

Returns: str — SVG markup.

from img2num import image_to_svg, ImageToSvgConfig

svg = image_to_svg(img)

# Or with an explicit config:
cfg = ImageToSvgConfig(kmeans={"k": 16})
svg = image_to_svg(img, config=cfg)

bilateral_filter(image, sigma_spatial, sigma_range, color_space)

Edge-preserving smoothing.

Parameters:

NameTypeDescription
imageNDArray[np.uint8]Input RGBA image.
sigma_spatialfloatSpatial Gaussian standard deviation (proximity).
sigma_rangefloatRange Gaussian standard deviation (color similarity).
color_spaceint0 = CIE LAB, 1 = sRGB.

Returns: NDArray[np.uint8] — Filtered image.

from img2num import bilateral_filter

filtered = bilateral_filter(img, 3, 50, 0)

kmeans(data, k, max_iter, color_space)

K-means color clustering.

Parameters:

NameTypeDescription
dataNDArray[np.uint8]Input RGBA image.
kintNumber of clusters (colors).
max_iterintMaximum k-means iterations.
color_spaceint0 = CIE LAB, 1 = sRGB.

Returns: tuple[NDArray[np.uint8], NDArray[np.int32]](clustered_data, labels).

from img2num import kmeans

clustered, labels = kmeans(img, 16, 100, 0)

labels_to_svg(data, labels, min_area, min_thickness)

Convert a label map into vector paths.

Parameters:

NameTypeDescription
dataNDArray[np.uint8]Input RGBA image.
labelsNDArray[np.int32]Per-pixel cluster labels (from kmeans).
min_areaintMinimum region area (px) to include.
min_thicknessintMinimum region thickness (px); thinner regions are merged. 0 disables.

Returns: str — SVG markup.

from img2num import kmeans, labels_to_svg

_, labels = kmeans(img, 16, 100, 0)
svg = labels_to_svg(img, labels, 100, 0)

gaussian_blur_fft(image, sigma)

Apply a Gaussian blur via FFT.

Parameters:

NameTypeDescription
imageNDArray[np.uint8]Input RGBA image.
sigmafloatStandard deviation of the Gaussian.

Returns: NDArray[np.uint8] — Blurred image.

invert_image(image)

Invert pixel values.

Parameters:

NameTypeDescription
imageNDArray[np.uint8]Input RGBA image.

Returns: NDArray[np.uint8] — Inverted image.

threshold_image(image, num_thresholds)

Reduce the image to num_thresholds discrete intensity levels.

Parameters:

NameTypeDescription
imageNDArray[np.uint8]Input RGBA image.
num_thresholdsintNumber of threshold levels.

Returns: NDArray[np.uint8] — Thresholded image.

black_threshold_image(image, num_thresholds)

Like threshold_image, but biased toward darker output.

Parameters:

NameTypeDescription
imageNDArray[np.uint8]Input RGBA image.
num_thresholdsintNumber of threshold levels.

Returns: NDArray[np.uint8] — Thresholded image.

ImageToSvgConfig

Configuration object passed to image_to_svg. All parameters have sensible defaults and can be set via constructor or attribute assignment.

AttributeTypeDefaultDescription
bilateral_filter.sigma_spatialfloat3.0Bilateral spatial sigma.
bilateral_filter.sigma_rangefloat50.0Bilateral range sigma.
kmeans.kint16Number of clusters.
kmeans.max_iterint100Maximum k-means iterations.
min_cluster_areaint100Minimum region area (px).
min_thicknessint0Minimum region thickness (px); 0 disables.
color_spaceint00 = CIE LAB, 1 = sRGB.
from img2num import ImageToSvgConfig

# Construct with nested dicts...
cfg = ImageToSvgConfig(
bilateral_filter={"sigma_spatial": 3.0, "sigma_range": 50.0},
kmeans={"k": 32},
min_cluster_area=50,
color_space=0,
)

# ...or set attributes directly:
cfg.kmeans.k = 32
cfg.min_cluster_area = 50