I know there is a lot of questions about Python and OpenCV but I didn't find help on this special topic.
I want to extract SIFT keypoints from an image in python OpenCV.
I have recently installed OpenCV 2.3 and can access to SURF and MSER but not SIFT.
I can't see anything related to SIFT in python modules (cv and cv2) (well I'm lying a bit: there are 2 constants: cv2.SIFT_COMMON_PARAMS_AVERAGE_ANGLE
and cv2.SIFT_COMMON_PARAMS_FIRST_ANGLE
).
This puzzles me开发者_StackOverflow中文版 since a while. Is that related to the fact that some parts of OpenCV are in C and other in C++? Any idea?
P.S.: I have also tried pyopencv (another python binding for OpenCV <= 2.1) without success.
I can't say whether this is the reason SIFT was not available via Python for OpenCV 2.3 (as the original question asks). However, the patent which was preventing SIFT from being included in OpenCV expired on 2020-03-06.
The distributed build of OpenCV now includes SIFT since version 4.4.0, accessible via cv2.SIFT_create()
in Python.
See the documentation for further information on its use.
You can compute SIFT features using OpenCV python bindings as follows:
import cv2
sift = cv2.SIFT()
keypoints, descriptors = sift.detectAndCompute(imgray,None)
SIFT has been patented and is not free for commercial use.
But if you want to use it for educational purposes, it's simple:
pip install opencv-python opencv-contrib-python
and then you can do
import cv2
# Initiate SIFT detector
sift = cv2.xfeatures2d.SIFT_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img, None)
On ubuntu you can fix with installing this version of opencv-contrib
pip3 install opencv-contrib-python==3.4.0.12
精彩评论