ethereon / lycon

A minimal and fast image library for Python and C++
Other
287 stars 27 forks source link
computer-vision cpp image-processing python

Lycon

A minimal and fast image library for Python and C++.

Lycon is a small subset of optimized image operations derived from OpenCV.

Current set of features include:

Tested on:

Install

pip install lycon

Native extension dependencies:

Ubuntu

Single-line command for installing all dependencies:

sudo apt-get install cmake build-essential libjpeg-dev libpng-dev

Anaconda

When working within an Anaconda Python distribution, it is recommended to use the latest cmake version (3.6 or newer). Older versions can lead to a mismatch between the libpng and libjpeg headers used to build Lycon (usually the system headers), and the linked library (which may be preempted by the Anaconda-scoped version). To install the latest cmake version:

conda install cmake

Example

import lycon

# Load an image as a numpy array
img = lycon.load('mittens.jpg')
# Resize the image using bicubic interpolation
resized = lycon.resize(img, width=256, height=512, interpolation=lycon.Interpolation.CUBIC)
# Crop the image (like any regular numpy array)
cropped = resized[:100, :200]
# Save the image
lycon.save('cropped-mittens.png', cropped)

Limitations

Compared to other image processing libraries (OpenCV, pillow, scikit-image), Lycon offers a very limited set of operations. Intended usages include data loaders for deep learning, mass image resizing, etc.

Advantages over OpenCV

However, if you already have OpenCV installed, Lycon's advantages are minimal.

Advantages over PIL(low)

Advantages over Scikit-Image

Benchmarks

Operation Lycon OpenCV PIL Scikit-Image
Upsample: Nearest 0.1944 0.1948 (1x) 2.1342 (11x) 30.8982 (158.9x)
Upsample: Bilinear 0.4852 0.4940 (1x) 7.2940 (15x) 45.9095 (94.6x)
Upsample: Bicubic 1.8162 1.8182 (1x) 8.9589 (4.9x) 120.1645 (66.1x)
Upsample: Lanczos 4.5641 4.5714 (1x) 10.7517 (2.3x)
Upsample: Area 0.4801 0.4931 (1x)
Downsample: Nearest 0.0183 0.0181 (1x) 0.4379 (24.2x) 3.6101 (199.9x)
Downsample: Bilinear 0.0258 0.0257 (1x) 1.3122 (51x) 4.8487 (188.4x)
Downsample: Bicubic 0.1324 0.1329 (1x) 1.8153 (13.7x) 9.4905 (71.6x)
Downsample: Lanczos 0.3317 0.3328 (1x) 2.4058 (7.2x)
Downsample: Area 0.0258 0.0259 (1x)
Read: JPG 0.3409 0.5085 (1.5x) 1.4081 (4.1x) 1.4628 (4.3x)
Read: PNG 1.2114 1.3245 (1.1x) 1.8274 (1.5x) 1.8674 (1.5x)
Write: JPG 0.4760 0.6046 (1.3x) 2.3823 (5x) 5.0159 (10.5x)
Write: PNG 2.1421 2.2370 (1x) 9.0580 (4.2x) 11.6060 (5.4x)

License

See LICENSE for further details.