18

我知道有很多关于PythonOpenCV的问题,但我没有找到关于这个特殊主题的帮助。

我想从 python OpenCV 中的图像中提取SIFT 关键点。

我最近安装了 OpenCV 2.3,可以访问 SURF 和 MSER 但不能访问 SIFT。我在 python 模块(cv 和 cv2)中看不到任何与 SIFT 相关的东西(我有点撒谎:有 2 个常量:cv2.SIFT_COMMON_PARAMS_AVERAGE_ANGLEcv2.SIFT_COMMON_PARAMS_FIRST_ANGLE)。

这让我困惑了一段时间。这是否与 OpenCV 的某些部分在 C 中而其他在 C++ 中的事实有关?任何想法?

PS:我也尝试过 pyopencv(OpenCV <= 2.1 的另一个 python 绑定)但没有成功。

4

5 回答 5

6

我不能说这是否是 SIFT 不能通过 Python 用于 OpenCV 2.3 的原因(正如原始问题所要求的那样)。但是,阻止 SIFT 包含在 OpenCV 中的专利于 2020-03-06 到期。

OpenCV 的分布式构建现在包括自 4.4.0 版以来的 SIFT,可通过cv2.SIFT_create()Python 访问。

有关其使用的更多信息,请参阅文档

于 2021-10-29T17:44:39.537 回答
1

您确定允许 OpenCV 支持 SIFT 吗?SIFT 是一种专有特征类型,由英属哥伦比亚大学和该算法的发明者 David Lowe 在美国申请了专利。在我自己的研究中,我不得不多次重写这个算法。事实上,一些视觉研究人员试图避免 SIFT 并使用其他尺度不变模型,因为 SIFT 是专有的。

于 2011-08-22T19:07:22.583 回答
0

您可以使用 OpenCV python 绑定计算 SIFT 特征,如下所示:

  import cv2

  sift = cv2.SIFT()
  keypoints, descriptors = sift.detectAndCompute(imgray,None)
于 2014-09-02T12:07:12.323 回答
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)
于 2018-07-25T22:27:11.353 回答
0

在 ubuntu 上,您可以通过安装此版本的 opencv-contrib 来修复

pip3 install opencv-contrib-python==3.4.0.12
于 2019-03-13T22:12:10.387 回答