AttributeError: 'module' object has no attribute 'xfeatures2d' [Python/OpenCV 2.4]

This line:

sift = cv2.xfeatures2d.SIFT_create()

return error:

Traceback (most recent call last):
  File "C:/Python27/openCVskrypty/GUI/SOLUTION2.py", line 11, in <module>
    sift = cv2.xfeatures2d.SIFT_create()
AttributeError: 'module' object has no attribute 'xfeatures2d'

I read something about this error and it appears in OpenCV version 3.0. This is quite weird because I have 2.4.11 version.

I check dir(cv2) and I haven't got xfeatures2d module. Does anyone know why? Can I download it separately?

Thanks for help how fix this.


I think you should install opencv-contrib-python instead. The module you're using is not support in opencv-python. See opencv-contrib-python.

To install:

pip install opencv-contrib-python

SIFT is a patented algorithm, hence not available in each open-cv version. What you can do is install opencv and its contrib part simultaneously, i.e,

pip install opencv-python==3.3.0.10 opencv-contrib-python==3.3.0.10

SIFT worked fine for me on above versions of opencv.


After executing the command:

pip install opencv-contrib-python

, I got the following error:

error: OpenCV(4.0.0) /Users/rene/build/skvark/opencv-python/opencv_contrib/modules/xfeatures2d/src/sift.cpp:1207: error: (-213:The function/feature is not implemented) This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function 'create'

Could solve it with the following command in anaconda:

conda install -c menpo opencv

Or with pip:

pip install opencv-python==3.4.2.17

pip install opencv-contrib-python==3.4.2.17

For CV2 Version 4.5.1, this works

sift = cv2.SIFT_create()
kp = sift.detect(gimg,None)
img=cv2.drawKeypoints(gimg,kp,img)
plt.imshow(img)