Commit 03d2059f authored by Edwin Carlinet's avatar Edwin Carlinet

Improve README.

parent 40be59f6
Pipeline #19812 passed with stages
in 34 minutes and 38 seconds
......@@ -6,24 +6,24 @@
Pylene is a fork of [Milena](, an image processing
library targeting genericity and efficiency. Pylene is a modernized version of
Milena with the following objectives:
library targeting genericity and efficiency. It provided mostly Mathematical Morphology building blocs for image
processing pipelines. The library has the following objectives in mind:
* Simplicity: both python bindings and simple C++ syntax
* Efficiency: write algorithms in a simple way and run them as if they were written in C. We follow one guideline: zero-cost abstraction.
* Genericity: write algorithms that are able to run on many kind of images with, yet, zero-cost abstraction.
* Interopability: run pylene algorithms on image coming from external libraries (even on your own image type).
# Documentation
Link to the [C++ Documentation](
# License
Under [Mozilla Public License, v. 2.0](
# Prerequisited
Pylene is developed in modern C++ so you need a recent C++ compiler. The followings compilers are currently supported
and tested:
# Requirements
Pylene is developed in modern C++. You need a modern C++ compatible compiler:
* GCC 9 GCC 10
* GCC 9 and 10
* Clang 10
* Microsoft Visual Studio 2019
......@@ -34,11 +34,87 @@ This project relies on:
* [Boost](
* [{fmt}](
# Quick Start
## Installation
The preferred and strongly recommended way to use Pylene is using Conan, a C++ package manager, and CMake. For using the
library by other means, refer to the [documentation](
conan remote add lrde-public
1. Install the library with Conan:
conan install pylene/head@lrde/stable -g cmake_paths -g cmake_find_package
2. Edit your ``CMakeLists.txt`` to include the paths to the library:
find_package(Pylene CONFIG)
3. Links with target ``Pylene::Pylene``:
target_link_libraries(MyTarget PRIVATE Pylene::Pylene)
## Code sample
To use the algorithms of the library, just include the corresponding headers. Here is an example to perform a grayscale dilation
with a disc of radius 5.
#include <mln/core/image/ndimage.hpp>
#include <mln/morpho/dilation.hpp>
#include <mln/core/se/disc.hpp>
#include <mln/io/imread.hpp>
#include <mln/io/imsave.hpp>
int main(int argc, char** argv)
mln::image2d<uint8_t> input;
mln::io::imread(argv[1], input);
auto output = mln::morpho::dilation(input, mln::se::disc(5));
mln::io::imsave(output, argv[2]);
## What is in there ?
* Image in any dimension (2D, 3D for medical imaging...)
* Image with any value type (RGB-8, 16-bits, hyperspectral images...)
Morphological algorithms:
* se-based filter (dilation, erosion, openings, top-hats, rank-filters...)
* connected filters (area connected openings/closings, attributes filters; grain filters)
* morphological representations (min/max-tree, Tree of Shapes)
* segmentation algorithms (watersheds)
If you want to see more of what is in the library, have a look on the [C++ Documentation](
## Why is Pylene singular when compared to other libraries ?
* It is generic: it allows to write a single algorithm that could be apply on all compatibles image types
* It enables lazy-computing with a view system similar to the Boost Generic Image Library
Have a look on the [introduction]((
# Other ressources
## Presentations
Other resources (mind the dates, the library probably has changed since then):
* [A Modern C++ Library for Generic and Efficient Image Processing (GTGDMM'18)](
......@@ -12,9 +12,9 @@ Contents:
:maxdepth: 2
Introduction <intro>
Reference <reference>
Rumination <ruminations>
Quick Start <tutorial>
Reference Manual <reference>
Developer Manual <ruminations>
Indices and tables
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment