[英]OpenCV Python and SIFT features
我知道有很多关于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++中有关吗? 任何的想法?
PS:我也尝试过pyopencv(另一个python绑定OpenCV <= 2.1)但没有成功。
您确定允许 OpenCV 支持 SIFT 吗? SIFT 是一种专有特征类型,由英属哥伦比亚大学和该算法的发明者 David Lowe 在美国申请了专利。 在我自己的研究中,我不得不多次重写这个算法。 事实上,一些视觉研究人员试图避免 SIFT 并使用其他尺度不变模型,因为 SIFT 是专有的。
您可以使用 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 上,您可以通过安装此版本的 opencv-contrib 来修复
pip3 install opencv-contrib-python==3.4.0.12
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.