OpenCV Python和SIFT功能

时间:2011-07-17 08:40:08

标签: python opencv sift

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

我想从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 ++中的其他部分相关? 有什么想法吗?

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

  import cv2

  sift = cv2.SIFT()
  keypoints, descriptors = sift.detectAndCompute(imgray,None)

答案 2 :(得分:0)

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)

答案 3 :(得分:-1)

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

$entry = current(array_filter($array, function($e) use($v){ return $e->ID==$v; }));