Image Input and Output
RAVL includes a comprehensive mechanism for reading and writing objects
from and to files in a uniform and transparent fashion. It is based around two
global functions: Load
and Save
. In particular,
there is a set of routines to handle a variety of image file formats, together
with the ability to convert between several different pixel representations.
The generic load/save mechanism is described in Ravl.Core.IO. In order to invoke
the libraries specific to image I/O, you need to:
The generic load/save call can then be used in the usual way.
For an example of how to use the system with
images see exImgIO.cc.
(Remember: to compile this example you'll need the "RavlImageIO" library.)
To find what file formats and conversions are available, use the
conv
tool, with the following options:
-lf
- list all known file formats
-lc
- list all known conversions
-lt
- list all known classes (?)
Here's a summary of currently supported formats. Supported natively
in ravl are:
- pgm Grey scale images.
- ppm RGB colour images.
- pbm Bit image
With RavlExtImgIO which uses various open source libraries you also get:
- jpeg Lossy compressed images. Colour and grey scale. (Supports sequences stored in a single file.)
- png Lossless compressed images. Colour and grey scale.
- tiff Lossless compressed images.
Creating image converters
If you wish to load and save your own image type as ppm
,
pgm
or any other file format that is already supported, and the
particular conversion you want is not currently available, it is
straightforward to add one to the collection (currently in
Ravl/Image/ImageIO/ImgTypeCnv.cc)
. Following is an example for
converting a byte image into a double image. For more information on writing
converters see Ravl.Core.IO
ImageC< RealT> DPConvImageCT2RealImageCT(const ImageC< ByteT> &dat)
{
ImageC< RealT> ret(dat.Rectangle());
for(Array2dIter2C< RealT,ByteT> it(ret,dat);it;it++)
it.Data1() = (RealT) it.Data2();
return ret;
}
DP_REGISTER_CONVERTION(ImageCT2RealImageCT, 1);
The argument in the function call indicates (as a ratio of the
number of bytes in the respective pixels) the amount of
information lost in the conversion. In this example, no
information is lost, so the ratio is 1. For double to char
conversion, the ration would be 8.
Develop functions: