Can't use SURF, SIFT in OpenCV

There is a pip source that makes this very easy.

  1. If you have another version of opencv-python installed use this command to remove it to avoid conflicts:

    pip uninstall opencv-python
  2. Then install the contrib version with this:

    pip install opencv-contrib-python
  3. SIFT usage:

    import cv2
    sift = cv2.xfeatures2d.SIFT_create()

For recent information on this issue (as of Sept 2015) consult this page.

Most information on this question here is obsolete.

What pyimagesearch is saying is that SURF/SIFT were moved to opencv_contrib because of patent issues.

For installation there is also a nice page that tells you how to install opencv with opencv_contrib and Python support so you get SURF/SIFT.

Notice that the API also changed. Now it's like this:

sift = cv2.xfeatures2d.SIFT_create()

Before I found the above pages, I also suffered quite a bit. But the pages listed do a very good job of helping with installation and explaining what's wrong.

FYI, as of 3.0.0 SIFT and friends are in a contrib repo located at and are not included with opencv by default.