我知道有很多关于Python和OpenCV的问题,但是我没有找到关于这个特殊主题的帮助。
我想从python OpenCV中的图像中提取SIFT关键点。
我最近安装了OpenCV 2.3,可以访问SURF和MSER,但不能访问SIFT。我在python模块(cv和cv2)中看不到任何与SIFT相关的东西(好吧,我有点撒谎:有2个常量:cv2.SIFT_COMMON_PARAMS_AVERAGE_ANGLE
和cv2.SIFT_COMMON_PARAMS_FIRST_ANGLE
)。
这个问题一直困扰着我。这是否与OpenCV的某些部分是C语言而其他部分是c++语言有关?任何想法?
注::我也尝试过pyopencv (OpenCV的另一个python绑定<= 2.1)没有成功。
我不能说这是否是通过Python无法在OpenCV 2.3中使用SIFT的原因(如原始问题所问)。然而,阻止SIFT被包含在OpenCV中的专利已于2020-03-06到期。
OpenCV的分布式构建现在从4.4.0版本开始包含SIFT,可以通过Python中的cv2.SIFT_create()
访问。
您可以使用OpenCV python绑定计算SIFT特征,如下所示:
import cv2
sift = cv2.SIFT()
keypoints, descriptors = sift.detectAndCompute(imgray,None)
SIFT已获得专利,不能免费用于商业用途。
但是如果你想把它用于教育目的,它很简单:
pip install opencv-python opencv-contrib-python
然后是
import cv2
# Initiate SIFT detector
sift = cv2.xfeatures2d.SIFT_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img, None)
在ubuntu上你可以安装这个版本的openv -contrib
pip3 install opencv-contrib-python==3.4.0.12