Using imread outside of Python

Actually, imread is not a Python library. It’s really a C++ library with very good Python/numpy bindings. But you can easily use it from other languages (including C++, of course) by adapting your image representation to the imread interface.

The Image and the ImageFactory interfaces

You need to support the Image interface:

class Image {
    public:
        // number of dimensions
        virtual int ndims() const = 0;

        // size of dimension d
        virtual int dim(int d) const = 0;

        // get a pointer to row `r`
        virtual void* rowp(int r) = 0;
};

It is assumed that an RGB image is represented as H x W x 3 and RGBA as H x W x 4.

You also need to support the ImageFactory interface:

class ImageFactory {
    public:
        Image* create(int nbits, int w, int h, int d);
};

The create methods create 2 or 3-dimensional images with nbits per pixel.

See the numpy interface in the source code for inspiration.