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, extract_roi
from sdimg.segment import refine_grabcut
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.- 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. sdimg.spatialoperations preserve input dtype and channel shape.- 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, extract_roi
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))
roi_result = extract_roi(mask)
if roi_result is not None:
roi_mask, bbox = roi_result
refined = refine_grabcut(image, roi_mask, bbox)
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.
The lossless WebP string codec preserves RGBA alpha and ignores
grayscale+alpha's alpha channel.
Metadata
Release files for sdimg 0.3.0
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.0.tar.gz | 17.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sdimg-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 42.0 kB
Release files / sdimg-0.3.0.tar.gz
| Download URL | sdimg-0.3.0.tar.gz |
|---|---|
| Size | 17.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0218a46617be35632fda1e64b49192faa39e3abd0eb1cc6508e7fd83c1c1392a
|
|
BLAKE2b-256 checksum How to use checksums |
d0a468b96de8be5b0be8812e2ba6a21d44ad0f6709e1b7c8c7ddd4dd1494f9bd
|
| 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.0-py3-none-any.whl
| Download URL | sdimg-0.3.0-py3-none-any.whl |
|---|---|
| Size | 24.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
91df9f0ccc31681454305aaaece37fb8a64805250490771b41fe49e971ec5610
|
|
BLAKE2b-256 checksum How to use checksums |
95eaa01e61f9a2889ab860b5db55d38940c7da1bd9f7e4bce08aa28e0b9852df
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|