OpenCV Python与SIFT特征
我知道关于Python和OpenCV的问题很多,但我在这个特定话题上没有找到帮助。
我想在Python的OpenCV中从一张图片中提取SIFT关键点。
我最近安装了OpenCV 2.3,可以使用SURF和MSER,但就是找不到SIFT。我在Python模块(cv和cv2)中没有看到任何与SIFT相关的东西(嗯,我有点撒谎:确实有两个常量:cv2.SIFT_COMMON_PARAMS_AVERAGE_ANGLE
和cv2.SIFT_COMMON_PARAMS_FIRST_ANGLE
)。
这让我困惑了一段时间。这是不是跟OpenCV的一些部分是用C写的,其他部分是用C++写的有关?有没有什么想法?
附言:我也尝试过pyopencv(另一个针对OpenCV <= 2.1的Python绑定),但没有成功。
4 个回答
0
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)
0
你可以使用OpenCV的Python接口来计算SIFT特征,方法如下:
import cv2
sift = cv2.SIFT()
keypoints, descriptors = sift.detectAndCompute(imgray,None)
6
我不能确定这是否是导致OpenCV 2.3中没有SIFT的原因(正如原问题所问)。不过,阻止SIFT被包含在OpenCV中的专利在2020年3月6日到期了。
从OpenCV 4.4.0版本开始,分发的OpenCV版本现在已经包含了SIFT,可以通过 cv2.SIFT_create()
在Python中使用。
想了解更多使用方法,可以查看 这份文档。