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)