OpenCV is an open-source BSD-licensed library that includes several hundreds of computer vision algorithms.OpenCV has a modular structure, which means that the package includes several shared or static libraries. The following modules are available:
- core - a compact module defining basic data structures, including the dense multi-dimensional array Mat and basic functions used by all other modules.
- imgproc - an image processing module that includes linear and non-linear image filtering, geometrical image transformations (resize, affine and perspective warping, generic table-based remapping), color space conversion, histograms, and so on.
- video - a video analysis module that includes motion estimation, background subtraction, and object tracking algorithms.
- calib3d - basic multiple-view geometry algorithms, single and stereo camera calibration, object pose estimation, stereo correspondence algorithms, and elements of 3D reconstruction.
- features2d - salient feature detectors, descriptors, and descriptor matchers.
- objdetect - detection of objects and instances of the predefined classes (for example, faces, eyes, mugs, people, cars, and so on).
- highgui - an easy-to-use interface to video capturing, image and video codecs, as well as simple UI capabilities.
- gpu - GPU-accelerated algorithms from different OpenCV modules.
- ... some other helper modules, such as FLANN and Google test wrappers, Python bindings, and others.
- NumPy provides an N-dimensional array type, the ndarray, which describes a collection of “items” of the same type.
- The items can be indexed using for example N integers.
- All ndarrays are homogenous: every item takes up the same size block of memory, and all blocks are interpreted in exactly the same way.
- How each item in the array is to be interpreted is specified by a separate data-type object, one of which is associated with every array.
- In addition to basic types (integers, floats, etc.), the data type objects can also represent data structures.
- An item extracted from an array, e.g., by indexing, is represented by a Python object whose type is one of the array scalar types built in NumPy.
- The array scalars allow easy manipulation of also more complicated arrangements of data.