The library supports many operations that are useful on
Document images
Natural images
Fundamental image processing and image analysis operations
Rasterop (aka bitblt)
Affine transforms (scaling, translation, rotation, shear) on images of arbitrary pixel depth
Projective and bilinear transforms
Binary and grayscale morphology, rank order filters, and convolution
Seedfill and connected components
Image transformations with changes in pixel depth, both at the same scale and with scale change
Pixelwise masking, blending, enhancement, arithmetic ops, etc.
Ancillary utilities
I/O for standard image formats (jpg, png, tiff, bmp, pnm, gif, ps, pdf, webp)
Utilities to handle arrays of image-related data types (e.g., pixa, boxa, pta)
Utilities for stacks, generic arrays, queues, heaps, lists; number and string arrays; etc.
Examples of some applications enabled and implemented
Octcube-based color quantization (w/ and w/out dithering)
Modified median cut color quantization (w/ and w/out dithering)
Skew determination of text images
Adaptive normalization and binarization
Segmentation of page images with mixed text and images
Location of baselines and local skew determination
jbig2 unsupervised classifier
Border representations of 1 bpp images and raster conversion for SVG
Postscript generation (levels 1, 2 and 3) of images for device-independent output
PDF generation (G4, DCT, FLATE) of images for device-independent output
Connectivity-preserving thinning and thickening of 1 bpp images
Image warping (captcha, stereoscopic)
Image dewarping based on content (textlines)
Watershed transform
Greedy splitting of components into rectangles
Location of largest fg or bg rectangles in 1 bpp images
Search for least-cost paths on binary and grayscale images
Barcode reader for 1D barcodes (very early version as of 1.55)
Implementation characteristics
Efficient: image data is packed binary (into 32-bit words); operations on 32-bit data whenever possible
Simple: small number of data structures; simplest implementations provided that are efficient
Consistent: data allocated on the heap with simple ownership rules; function names usually begin with primary data structure (e.g., pix); simple code patterns throughout
Robust: all ptr args checked; extensive use of accessors; exit not permitted
Tested: thorough regression tests provided for most basic functions; valgrind tested