## Image operations Image operations — Image operation functions |

## Functions

void | fp_img_free ()
int | fp_img_get_height ()
int | fp_img_get_width ()
unsigned char * | fp_img_get_data ()
int | fp_img_save_to_file ()
void | fp_img_standardize ()
struct fp_img * | fp_img_binarize ()
struct fp_minutia ** | fp_img_get_minutiae ()
int | fp_minutia_get_coords ()

## Types and Values

struct | fp_img
struct | fp_minutia

## Includes

    #include <fprint.h>

## Description

libfprint offers several ways of retrieving images from imaging devices, one example being the `fp_dev_img_capture()` function. The functions documented below allow you to work with such images.

### Image format

All images are represented as 8-bit greyscale data.

### Image standardization

In some contexts, images you are provided through libfprint are raw images from the hardware. The orientation of these varies from device-to-device, as does the color scheme (black-on-white or white-on-black?). libfprint provides the `fp_img_standardize()` function to convert images into standard form, which is defined to be: finger flesh as black on white surroundings, natural upright orientation.

## Functions

### fp_img_free ()

    void
    fp_img_free (struct fp_img *img);

Frees an image. Must be called when you are finished working with an image.

#### Parameters

img | the image to destroy. If `NULL`, function simply returns. |

### fp_img_get_height ()

    int
    fp_img_get_height (struct fp_img *img);

Gets the pixel height of an image.

#### Parameters

img | an image |

#### Returns

the height of the image

### fp_img_get_width ()

    int
    fp_img_get_width (struct fp_img *img);

Gets the pixel width of an image.

#### Parameters

img | an image |

#### Returns

the width of the image

### fp_img_get_data ()

    unsigned char *
    fp_img_get_data (struct fp_img *img);

Gets the greyscale data for an image. This data must not be modified or freed, and must not be used after `fp_img_free()` has been called.

#### Parameters

img | an image |

#### Returns

a pointer to libfprint's internal data for the image

### fp_img_save_to_file ()

    int
    fp_img_save_to_file (struct fp_img *img,
                         char *path);

A quick convenience function to save an image to a file in PGM format.

#### Parameters

img | the image to save |
path | the path to save the image. Existing files will be overwritten. |

#### Returns

0 on success, non-zero on error.

### fp_img_standardize ()

    void
    fp_img_standardize (struct fp_img *img);

Standardizes an image by normalizing its orientation, colors, etc. It is safe to call this multiple times on an image, libfprint keeps track of the work it needs to do to make an image standard and will not perform these operations more than once for a given image.

#### Parameters

img | the image to standardize |

### fp_img_binarize ()

    struct fp_img *
    fp_img_binarize (struct fp_img *img);

Get a binarized form of a standardized scanned image. This is where the fingerprint image has been "enhanced" and is a set of pure black ridges on a pure white background. Internally, image processing happens on top of the binarized image.

The image must have been standardized otherwise this function will fail.

It is safe to binarize an image and free the original while continuing to use the binarized version.

You cannot binarize an image twice.

#### Parameters

img | a standardized image |

#### Returns

a new image representing the binarized form of the original, or `NULL` on error. Must be freed with `fp_img_free()` after use.

### fp_img_get_minutiae ()

    struct fp_minutia **
    fp_img_get_minutiae (struct fp_img *img,
                         int *nr_minutiae);

Get a list of minutiae detected in an image. A minutia point is a feature detected on a fingerprint, typically where ridges end or split. libfprint's image processing code relies upon comparing sets of minutiae, so accurate placement of minutia points is critical for good imaging performance.

The image must have been standardized otherwise this function will fail.

You cannot pass a binarized image to this function. Instead, pass the original image.

Returns a list of pointers to minutiae, where the list is of length indicated in the nr_minutiae output parameter. The returned list is only valid while the parent image has not been freed, and the minutiae data must not be modified or freed.

#### Parameters

img | a standardized image |
nr_minutiae | an output location to store minutiae list length |

#### Returns

a list of minutiae points. Must not be modified or freed.

### fp_minutia_get_coords ()

    int
    fp_minutia_get_coords (struct fp_minutia *minutia,
                           int *coord_x,
                           int *coord_y);

Sets `coord_x` and `coord_y` to be the coordinates of the detected minutia, so it can be presented in a more verbose user interface. This is usually only used for debugging purposes.

#### Parameters

minutia | a struct fp_minutia |
coord_x | the return variable for the X coordinate of the minutia |
coord_y | the return variable for the Y coordinate of the minutia |

#### Returns

0 on success, -1 on error.

## Types and Values

### struct fp_img

    struct fp_img {
    	int width;
    	int height;
    	size_t length;
    	FpiImgFlags flags;
    	unsigned char *binarized;
    	unsigned char data[0];
    };

fp_img is an opaque structure type. You must access it using the functions in this section.

### struct fp_minutia

    struct fp_minutia;

fp_minutia is an opaque structure type. You must access it using the functions in this section.