sdimg
Small, function-based image and mask processing library built on
numpy.ndarray. The public API is pure functions and requires Python 3.12+.
Install
pip install sdimg
Modules
sdimg.image: image conversion, filtering, enhancement, normalization, deterministic array IDs, lossless string codecs, and file I/O.sdimg.mask: binary conversion, geometry, connected components, morphology, hulls, and distance transforms.sdimg.spatial: crop, pad, resize, rotate, flip, and tile split/merge.sdimg.segment: Otsu thresholding and GrabCut refinement.
Public imports are flat within each domain:
from sdimg.image import apply_gaussian_blur, equalize_histogram
from sdimg.mask import apply_morphology
from sdimg.segment import refine_grabcut
The implementation keeps representation-specific responsibilities inside their domains: image processing owns visual/alpha channel handling, spatial operations own dtype restoration, and segmentation owns its bbox and ROI lifecycle. Import public functions from the flat domain packages rather than implementation modules.
Core Contracts
- Inputs are
numpy.ndarrayvalues with real numeric or boolean dtype. - Images use non-empty shape
(H, W)or(H, W, C)withC in {1, 2, 3, 4}. - Color images are RGB. Convert OpenCV BGR inputs before calling
sdimg. - Channel meanings are grayscale, grayscale+alpha, RGB, and RGBA.
sdimg.imageprocessing returnsnp.uint8. Filters and enhancement preserve channel shape and leave alpha content unchanged. Color denoising follows the RGB contract; setting both denoising strengths to zero is an exact converted no-op.- Masks use non-empty shape
(H, W)and valuesbool,{0, 1}, or{0, 255}. Mask processing returns binarynp.uint8in{0, 1}; distance transforms returnnp.float32. Two-dimensional morphology kernel sizes use(width, height)order. sdimg.spatialoperations preserve input dtype and channel shape.resizeand tile merging reject integer values outside the safe range[-2**53, 2**53]instead of silently changing them.refine_grabcutaccepts an image-sized binary mask and returns a binary mask with the same spatial shape. Itsmarginexpands the initial bounding box over real source pixels, so refinement may add foreground outside that box.- Points use
(x, y). Bounding boxes use(xmin, ymin, xmax, ymax), minimum-inclusive and maximum-exclusive. - Empty mask geometry returns
Nonewhere no geometry exists.
Error Policy
TypeError: wrong Python input type.ValueError: invalid shape, dtype, parameter, mask value, or bbox.RuntimeError: wrapped OpenCV, Pillow, or third-party failure.
Quick Example
import numpy as np
from sdimg.image import apply_gaussian_blur, equalize_histogram
from sdimg.mask import apply_morphology
from sdimg.segment import refine_grabcut
image = np.random.default_rng(0).integers(
0,
256,
(128, 128, 3),
dtype=np.uint8,
)
mask = np.zeros((128, 128), dtype=np.uint8)
mask[32:96, 40:88] = 1
image = equalize_histogram(image)
image = apply_gaussian_blur(image, kernel_size=(5, 5), sigma_x=1.2)
mask = apply_morphology(mask, operation="open", kernel_size=(3, 3))
refined = refine_grabcut(image, mask)
Supporting Image Utilities
from sdimg.image import (
decode_image,
encode_image,
make_array_id,
read_image,
write_image,
)
image = read_image("input.tif")
image_id = make_array_id(image, prefix="img_")
payload = encode_image(image)
restored = decode_image(payload)
write_image(f"{image_id}.png", restored)
read_image returns RGB uint8. High-bit-depth and floating images are scaled
explicitly before RGB conversion. write_image writes RGB and ignores alpha.
make_array_id includes the array dtype, original shape, and content.
The lossless WebP string codec preserves RGBA alpha and ignores
grayscale+alpha's alpha channel.
Metadata
Release files for sdimg 0.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sdimg-0.3.2.tar.gz | 19.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sdimg-0.3.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 46.9 kB
Release files / sdimg-0.3.2.tar.gz
| Download URL | sdimg-0.3.2.tar.gz |
|---|---|
| Size | 19.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ab157dfb31888b601bc90510ae462313a5f3f5bdd58ed88c343e02fd42933a02
|
|
BLAKE2b-256 checksum How to use checksums |
d83947cc1ca8db03dd3ebf58c75294fb80c078dff8dba7510e81812d19a72541
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|
Release files / sdimg-0.3.2-py3-none-any.whl
| Download URL | sdimg-0.3.2-py3-none-any.whl |
|---|---|
| Size | 26.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cb74609455fa02aec0bc431772c831d09341ef45c9b8fbf308b00cb7e75a0bfe
|
|
BLAKE2b-256 checksum How to use checksums |
5e96622f76b9bb6f4c649b016d0ade88e3ef7014605cb7e26bf96fd179b492f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|