Hm, that would make the whole pipeline really slow (list and attribute access is really slow in Python) and would break the compatibility with the corner_* functions which return the keyponts as (N, 2) arrays.

Imo the only alternative is to use recarrays, but that also breaks compatibility with the corner_* functions. And with the recarray and Keypoint-class in 90% of the cases you carry around information in memory you actually do not need.

My suggestion is the following for future descriptors and extractors:

* `Detector.detect` provides the full keypoint information
* `Extractor.extract` needs at least the image and keypoints plus some additional parameters depending on the algorithm. You could actually use CenSurE for keypoint detection and use corner_orientations and finally use ORB.extract with the current interface and this should be as simple as:

    keypoints, scales = CenSurE().detect(img)
    ORB().extract(img, keypoints, scales, corner_orientations(img, keypoints))

I think, the current interface allows such simple pipelines. But I am certainly open to other suggestions?