Модуль cv2.cv2 не имеет атрибута sift

Когда я пытаюсь:

sift = cv2.sift()

В итоге получаю следующее:

AttributeError: module 'cv2.cv2' has no attribute 'sift'

Как я могу это исправить? Любая помощь будет оценена

вы устанавливали contrib (и если он есть: несвободные) модули? stackoverflow.com/questions/44633378/…

Micka 13.09.2018 20:03

Да, я пробую «pip install opencv-contrib-python», но у меня все равно возникает та же ошибка. Спасибо, но есть ли еще что-нибудь, что я должен сделать?

Safiya 14.09.2018 06:33

Традиционно sift - это часть "несвободного" материала в opencv. Вы уверены, что синтаксис cv2.sift () правильный? Взгляните на pyimagesearch.com/2015/07/16/…

Micka 14.09.2018 09:42
2
3
4 408
1

Ответы 1

Короткий ответ:

Если у кого-то возникает ошибка во время работы

sift = cv2.SIFT_create()

Убедитесь, что у вас есть

  1. Установлены дополнительные модули opencv: opencv-contrib(Репозиторий GitHub)
  2. Вместо приведенного выше кода запустите это:
sift = cv2.xfeatures2d.SIFT_create()

Длинный ответ:

Возможно, это не ответ на этот конкретный вопрос, но я решаю записать его на всякий случай, если кто-то сочтет это неприятным, как я.

Я изучал SIFT через Введение в SIFT (масштабно-инвариантное преобразование признаков) и пробовал код

sift = cv2.SIFT_create()

Который сказал мне следующее

AttributeError: module 'cv2.cv2' has no attribute 'SIFT_create'

(Изменить: версия документа по умолчанию в ссылка выше - 4.4.0-pre. Если вы переключите его на 4.3.0, документ правильно скажет вам вызвать правильный метод. Я полагаю, это означает, что SIFT вернется к основному в следующем выпуске 4.4.0)

Затем я подошел к этому вопросу и в комментарии выше ссылка от @Micka дал мне ответ, как показано в кратком ответе. Спасибо, Мика!

P.S. Срок действия патента фактически истек, поэтому SIFT сейчас фактически бесплатен, но на данный момент работа по перемещению SIFT в основные модули еще предстоит сделать.

Другие вопросы по теме