Some concepts used in ShapeLogic do not map well from Java to C++. This page list those, and their mapping or the possible different mappings.
ImageJ has strategically chosen only to work with a very simple color model:
An image's pixels can always be stored as an array of a primitive number type.
GIL has a very diverse color model with both interleaved or planar images, with any number of channels, any word type and color space.
The only abstraction that can be made on this would be a pixel coordinate.
There could be an interface for whether a pixel satisfies a given predicate. In Java this gives an extra layer of indirection.
Another option is to constrain the color models that can be handled.
The simple mapping would be to create abstract C++ classes and use multiple inheritance.
For some algorithms the new C++ concepts might work well.
The C++ STL iterator has a start point and a determined end point.
The Java iterator has a next() and hasNext() method.
The lazy data streams used in ShapeLogic do not have a determined end point, so an STL iterator does not seem to be an option. It is trivial to define and implement a Java iterator in C++.