### Navigation

- index
- next |
- previous |
- OpenCV 3.0.0-dev documentation »
- OpenCV API Reference »
- features2d. 2D Features Framework »

# Common Interfaces of Descriptor Extractors

Extractors of keypoint descriptors in OpenCV have wrappers with a common interface that enables you to easily switch between different algorithms solving the same problem. This section is devoted to computing descriptors represented as vectors in a multidimensional space. All objects that implement the `vector` descriptor extractors inherit the `DescriptorExtractor` interface.

Note

- An example explaining keypoint extraction can be found at opencv_source_code/samples/cpp/descriptor_extractor_matcher.cpp
- An example on descriptor evaluation can be found at opencv_source_code/samples/cpp/detector_descriptor_evaluation.cpp

## DescriptorExtractor

class `DescriptorExtractor` : public `Algorithm`

Abstract base class for computing descriptors for image keypoints.

    class CV_EXPORTS DescriptorExtractor
    {
    public:
        virtual ~DescriptorExtractor();

        void compute( InputArray image, vector<KeyPoint>& keypoints,
                      OutputArray descriptors ) const;
        void compute( InputArrayOfArrays images, vector<vector<KeyPoint> >& keypoints,
                      OutputArrayOfArrays descriptors ) const;

        virtual void read( const FileNode& );
        virtual void write( FileStorage& ) const;

        virtual int descriptorSize() const = 0;
        virtual int descriptorType() const = 0;
        virtual int defaultNorm() const = 0;

        static Ptr<DescriptorExtractor> create( const String& descriptorExtractorType );

    protected:
        ...
    };

In this interface, a keypoint descriptor can be represented as a dense, fixed-dimension vector of a basic type. Most descriptors follow this pattern as it simplifies computing distances between descriptors. Therefore, a collection of descriptors is represented as `Mat` , where each row is a keypoint descriptor.

## DescriptorExtractor::compute

Computes the descriptors for a set of keypoints detected in an image (first variant) or image set (second variant).

C++:`` void `DescriptorExtractor::``compute`(InputArray image, vector<KeyPoint>& keypoints, OutputArray descriptors)`const`

C++:`` void `DescriptorExtractor::``compute`(InputArrayOfArrays images, vector<vector<KeyPoint>>& keypoints, OutputArrayOfArrays descriptors)`const`

Python:`` `cv2.DescriptorExtractor_create.``compute`(image, keypoints[, descriptors]) → keypoints, descriptors

  Parameters: | image – Image. images – Image set. keypoints – Input collection of keypoints. Keypoints for which a descriptor cannot be computed are removed. Sometimes new keypoints can be added, for example: `SIFT` duplicates keypoint with several dominant orientations (for each orientation). descriptors – Computed descriptors. In the second variant of the method `descriptors[i]` are descriptors computed for a `keypoints[i]`. Row `j` is the `keypoints` (or `keypoints[i]`) is the descriptor for keypoint `j`-th keypoint.

## DescriptorExtractor::create

Creates a descriptor extractor by name.

C++:`` Ptr<DescriptorExtractor> `DescriptorExtractor::``create`(const String& descriptorExtractorType)

Python:`` `cv2.``DescriptorExtractor_create`(descriptorExtractorType) → retval

  Parameters: | descriptorExtractorType – Descriptor extractor type.

The current implementation supports the following types of a descriptor extractor:

> - `"BRISK"` – `BRISK`
> - `"ORB"` – `ORB`

## Help and Feedback

You did not find what you were looking for?

- Ask a question on the Q&A forum.
- If you think something is missing or wrong in the documentation, please file a bug report.

### Navigation

- index
- next |
- previous |
- OpenCV 3.0.0-dev documentation »
- OpenCV API Reference »
- features2d. 2D Features Framework »