57

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.

Lipstick
  • 739
  • 3
  • 8
  • 14

13 Answers13

62

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
Shao-Kui
  • 776
  • 5
  • 11
  • 1
    This is likely the right solution for those using OpenCV 3+ who see the AttributeError: 'module' object has no attribute 'xfeatures2d' – Karaszka May 28 '18 at 15:02
  • have you tried to uninstall the previous OpenCV first? – Shao-Kui Sep 11 '19 at 06:26
  • Worked for me but got this warning - [ WARN:0@0.237] global shadow_sift.hpp:13 SIFT_create DEPRECATED: cv.xfeatures2d.SIFT_create() is deprecated due SIFT tranfer to the main repository. https://github.com/opencv/opencv/issues/16736 – Shubham Singh Mar 03 '23 at 05:16
33

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.

Shankul Shukla
  • 449
  • 1
  • 5
  • 7
  • 5
    You can even go up to `3.4.2.17` and still use SIFT. – creimers Jan 03 '19 at 17:57
  • 1
    At least for me, cv2.xfeatures2d.SIFT_create() only work on 3.3.0.10 – Emeeus Mar 21 '19 at 13:30
  • 1
    ERROR: No matching distribution found for opencv-python==3.3.0.10 – Talha Anwar Sep 08 '19 at 15:38
  • 1
    Version 3.3.0.10 wasn't available now, next version up was 3.4.2.16 and was able to work with ```sift=cv2.xfeatures2d.SIFT_create()``` . I also had to do pip3 install opencv-python sudo apt-get install libatlas-base-dev sudo apt-get install libjasper-dev sudo apt-get install libqtgui4 sudo apt-get install python3-pyqt5 sudo apt install libqt4-test – Captain Fantastic Jan 08 '20 at 22:55
  • 1
    Is available in newer versions just by using `cv2.SIFT_create()`. I am using opencv 4.5.4 rn – Daniel Azemar Dec 15 '21 at 09:54
23

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)
Usama Imdad
  • 591
  • 5
  • 11
14

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
Rene B.
  • 6,557
  • 7
  • 46
  • 72
5

I got this error and all I did was to uninstall opencv packages and install them in the following order.

STEPS

open Anaconda Prompt by running as administrator and type the following commands.

pip uninstall opencv-python

pip uninstall opencv-contrib-python

Then type the following commands

pip install opencv-contrib-python==3.4.2.16

pip install opencv-python==3.4.2.16

This solved my problem. Hope this solves yours!!

Community
  • 1
  • 1
Avin_ash
  • 61
  • 1
  • 2
4

In latest CV2 Version 4.5.3.56, this works:

img1 = cv2.imread(r'C:\Users\CW\Desktop\new_img.png') 
sift = cv2.SIFT_create() 
kp1, des1 = sift.detectAndCompute(img1, None)
flaxon
  • 928
  • 4
  • 18
Candy Wang
  • 41
  • 2
  • Code only answers are not considered good practice. Please consider [Explaining how this answers the question](https://meta.stackoverflow.com/questions/300837/what-comment-should-i-add-to-code-only-answers) – DevWithZachary Oct 11 '21 at 14:20
3

I used to have similar problem as @srihegde said you can try to uninstall opencv-contrib-python package and reinstall again. You can also try to uninstall opencv-python package if you have one, since it might mess with the packages too.

This helped for me.

Uninstall:

pip3 uninstall opencv-contrib-python
pip3 uninstall opencv-python

And then install:

pip3 install opencv-contrib-python
pip3 install opencv-python
3

I got the same error... I have used cv2.__version__ and cv2.__path__ to check the opencv version and path. Then I removed cv2 from site-packages. and install the following

pip install opencv-python==3.4.2.17

pip install opencv-contrib-python==3.4.2.17
Sanjoy Kanrar
  • 899
  • 8
  • 11
3

Use sift = cv2.SIFT_create() instead of cv2.xfeatures2d.SIFT_create() as sift patent has expired now, so OpenCV has moved SIFT_create() directly to main repository instead of contrib module in versions > 4.4 , see this

Mughees
  • 832
  • 7
  • 16
2

The problem is with your version of OpenCV. You say you're on version 2.4.11 but this version of OpenCV doesn't have this method available to it.

You can check the documentation. It has features2d

Whereas OpenCV 3.0 does.

Pythonista
  • 11,377
  • 2
  • 31
  • 50
1

This error may also occur in OpenCV 3+ as it is caused by mismatched versions of OpenCV and OpenCV-Contrib package.

I had OpenCV version 3.4.1 and OpenCV-Contrib version 3.4.0. I tried the following with OpenCV-Contrib:

Uninstall OpenCV-Contrib package:

$ pip uninstall opencv-contrib-python

Then install the same again:

$ pip install opencv-contrib-python

The pip automatically fetches and installs the latest compatible version.

srihegde
  • 358
  • 3
  • 8
0

It doesn't work for OpenCV 4.0 due to US patent matter. Perhaps we shall give it a thumb up for this OpenSift effort:

https://github.com/robwhess/opensift

Harry
  • 1,147
  • 13
  • 13
0

Open a Powershell Prompt and type the following command:

pip install --user opencv-contrib-python

Fixed it for me.

Open an Ananconda Powershell Prompt if you are using Jupyter Notebook.

minTwin
  • 1,181
  • 2
  • 21
  • 35