49

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
  • 649
  • 2
  • 8
  • 14

13 Answers13

53

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
  • 686
  • 5
  • 10
32

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
  • 419
  • 4
  • 6
  • 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
  • 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
16

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
  • 441
  • 5
  • 9
13

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.
  • 5,171
  • 6
  • 38
  • 64
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
  • 879
  • 8
  • 11
3

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.!!

Saad
  • 3,060
  • 2
  • 8
  • 31
Avin_ash
  • 41
  • 2
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,152
  • 2
  • 29
  • 49
2

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
  • 895
  • 3
  • 18
Candy Wang
  • 21
  • 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
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
  • 348
  • 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
  • 939
  • 12
  • 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
  • 811
  • 11
  • 27
-2

You can use this instead:

sift=cv2.SIFT()
Shiva127
  • 2,115
  • 1
  • 25
  • 22
user3094631
  • 315
  • 2
  • 12