Can't use SIFT in Python OpenCV v4.20
Solution 1
SIFT's patent has expired in last July. in versions > 4.4, the detector init command has changed to cv2.SIFT_create()
.
If you're not using opencv's GUI, It's recommended to install the headless version: pip install opencv-python-headless
Solution 2
Unfortunately, according to this Github issue, SIFT no longer available in opencv > 3.4.2. Since you're using OpenCV v4.2.0, it's not included even if you have installed pip install opencv-contrib-python
as shown in this post. A work around is to downgrade to any previous OpenCV version that includes SIFT (I believe any version below 3.4.3
). I've been successful when downgrading to v3.4.2.16
.
pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16
Using your code with v3.4.2.16
, SIFT seems to work
Solution 3
I had the same issue previously. I had tried all methods but finally a very simple method work for me which has already answered by many. However, there is a little change in my approach.
-
Step 1:
Uninstall the previously install opencv library
pip uninstall opencv-python
-
Step 2:
Install opencv contrib library due to copyright issue. Here, we are using version 3.4.2.17
pip install opencv-contrib-python==3.4.2.17
opencv contrib library installation error
The above figure shows version
3.4.2.16
not found error. Hence, I tried with version3.4.2.17
. If this version doesn't work, try other versions of 3.4.x. -
Step 3:
Then run the following
import cv2 sift = cv2.xfeatures2d.SIFT_create()
That's all. It works for me. I hope it works for you as well.
Solution 4
I had the same issue, after a lot of attempts, I tried installing opencv-contrib-python several times, but it worked just today. Just to be sure I installed both opencv-python and opencv-contrib-python.
pip install opencv-python
And
pip install opencv-contrib-python
The version that installed was 4.4.0.46 for both opencv-python and opencv-contrib-python. In case the later versions don't support it (A few of the previous versions didn't support SIFT, the one from a month ago, the latest opencv-contrib-python patch was released on Nov 2nd, 2020).
Yunus Emre Üzmez
I am student of electrical-electronics engineering. Interested about : C/C++ Programming , Microcontrollers ,Image Processing,Robotics
Updated on July 24, 2022Comments
-
Yunus Emre Üzmez almost 2 years
I am using OpenCV v4.20 and PyCharm IDE. I want to use SIFT algorithm. But I get this error. I looked for solutions of this error on the internet but none of them did help me. Do you know the solution of this error? (With pip I can install at least 3.4.2.16 version of OpenCV)
Here is my error:
Traceback (most recent call last): File "C:/Users/HP/PycharmProjects/features/featuredetect.py", line 7, in sift = cv.xfeatures2d_SIFT.create()
cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\sift.cpp:1210: 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 'cv::xfeatures2d::SIFT::create'
Here is my code:
import cv2 as cv image = cv.imread("the_book_thief.jpg") gray_image = cv.cvtColor(image,cv.COLOR_BGR2GRAY) sift = cv.xfeatures2d_SIFT.create() keyPoints = sift.detect(image,None) output = cv.drawKeypoints(image,keyPoints,None) cv.imshow("FEATURES DETECTED",output) cv.imshow("NORMAL",image) cv.waitKey(0) cv.destroyAllWindows()
-
Yunus Emre Üzmez about 4 yearsWhen ı run this command pip install opencv-python-nonfree it says that " ERROR: Could not find a version that satisfies the requirement opencv-python-nonfree (from versions: none) ERROR: No matching distribution found for opencv-python-nonfree"
-
Yunus Emre Üzmez about 4 yearsI did what you recommend.But still i am getting this error
-
Aravinda_gn over 3 yearsworked for me,try these .. pip install opencv-python==3.4.2.17 , pip install opencv-contrib-python==3.4.2.17
-
Elad Maimoni about 3 yearsseems it is fixed for version 4.5.1
-
blueether about 3 yearsThis is the correct answer in 2021. I had issues with
pip install opencv-python-headless
, but I was able to installpip install opencv-contrib-python
and run sift ascv2.SIFT_create()
without a problem. -
rikyeah over 2 yearsAs of January 2022, this is not correct anymore: it must have been moved once more.
-
Assaf-ge over 2 years@rikyeah please elaborate.
-
rikyeah over 2 yearsstackoverflow.com/users/11344054/nisan-chhetri 's answer below works for me, on a blank colab notebook
-
Assaf-ge about 2 yearsit's not a matter of date, it's a matter of opencv version. and for ver >4.4 this is correct one.
-
ArtOfWarfare about 2 years@EladMaimoni - It's not working for me in 4.5.1 or 4.5.5...