繁体   English   中英

OpenCV Python 和 SIFT 特征

[英]OpenCV Python and SIFT features

我知道有很多关于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(另一个python绑定OpenCV <= 2.1)但没有成功。

我不能说这是否是不能通过 Python 获得 OpenCV 2.3 的原因(正如原始问题所要求的那样)。 但是,阻止 SIFT 包含在 OpenCV 中的专利于 2020 年 3 月 6 日到期。

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

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

您确定允许 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM