我知道有很多关于Python和OpenCV的问题,但我没有找到关于这个特殊主题的帮助。
我想从python OpenCV中的图像中提取SIFT关键点。
我最近安装了OpenCV 2.3,可以访问SURF和MSER,但不能访问SIFT。我无法在python模块中看到与SIFT相关的任何内容(cv和cv2)(我有点说谎:有两个常量:cv2.SIFT_COMMON_PARAMS_AVERAGE_ANGLE
和cv2.SIFT_COMMON_PARAMS_FIRST_ANGLE
)。
这让我困惑了一段时间。这是否与OpenCV的某些部分在C和C ++中的其他部分相关?任何的想法?
P.S。:我也尝试过pyopencv(OpenCV <= 2.1的另一个python绑定)但没有成功。
你确定OpenCV可以支持SIFT吗? SIFT是一种专有功能类型,由不列颠哥伦比亚大学和美国的算法发明者David Lowe在美国获得专利。在我自己的研究中,我不得不多次重写这个算法。事实上,一些视觉研究人员试图避免SIFT并使用其他规模不变的模型,因为SIFT是专有的。
您可以使用OpenCV python绑定计算SIFT功能,如下所示:
import cv2
sift = cv2.SIFT()
keypoints, descriptors = sift.detectAndCompute(imgray,None)
SIFT一直是patented,不能免费用于商业用途。
但是如果你想将它用于教育目的,那很简单:
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上,您可以修复安装此版本的opencv-contrib
pip3 install opencv-contrib-python==3.4.0.12