Особенности OpenCV Python и SIFT - PullRequest
17 голосов
/ 17 июля 2011

Я знаю, что есть много вопросов о Python и OpenCV , но я не нашел помощи по этой специальной теме.

Я хочу извлечь Точки SIFT из изображения в Python OpenCV.

Я недавно установил OpenCV 2.3 и могу получить доступ к SURF и MSER, но не к SIFT. Я не вижу ничего связанного с SIFT в модулях Python (cv и cv2) (ну, я немного вру: есть 2 константы: cv2.SIFT_COMMON_PARAMS_AVERAGE_ANGLE и cv2.SIFT_COMMON_PARAMS_FIRST_ANGLE).

Это озадачивает меня с тех пор. Связано ли это с тем, что некоторые части OpenCV находятся на C, а другие на C ++? Есть идеи?

P.S .: Я также безуспешно пробовал pyopencv (еще одно связывание с Python для OpenCV <= 2.1). </p>

Ответы [ 4 ]

1 голос
/ 22 августа 2011

Вы уверены, что OpenCV разрешено поддерживать SIFT? SIFT - это запатентованный тип функций, запатентованный в США Университетом Британской Колумбии и Дэвидом Лоу, изобретателем алгоритма. В моем собственном исследовании мне пришлось много раз переписывать этот алгоритм. Фактически, некоторые исследователи зрения пытаются избежать SIFT и используют другие масштабно-инвариантные модели, потому что SIFT является проприетарным.

0 голосов
/ 14 марта 2019

В Ubuntu вы можете исправить с помощью установки этой версии opencv-contrib

pip3 install opencv-contrib-python==3.4.0.12
0 голосов
/ 26 июля 2018

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)
0 голосов
/ 02 сентября 2014

Вы можете вычислить функции SIFT, используя привязки Python OpenCV следующим образом:

  import cv2

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