Не могу использовать SIFT в OpenCV v4.20 - PullRequest
2 голосов
/ 05 февраля 2020

Я использую OpenCV v4.20 и PyCharm IDE. Я хочу использовать алгоритм SIFT. Но я получаю эту ошибку. Я искал решения этой ошибки на inte rnet, но ни один из них не помог мне. Знаете ли вы решение этой ошибки? (С помощью pip я могу установить как минимум версию 3.4.2.16 OpenCV)

Вот моя ошибка:

Traceback (последний вызов был последним): Файл "C: / Users / HP / PycharmProjects / features / featuredetect.py ", строка 7, в sift = cv.xfeatures2d_SIFT.create ()

cv2.error: OpenCV (4.2.0) C: \ projects \ opencv -python \ opencv_contrib \ modules \ xfeatures2d \ src \ sift. cpp: 1210: ошибка: (-213: функция / функция не реализована) Этот алгоритм запатентован и исключен из данной конфигурации; Установите параметр OPENCV_ENABLE_NONFREE CMake и пересоберите библиотеку в функции 'cv :: xfeatures2d :: SIFT :: create'

Вот мой код:

import cv2 as cv

image = cv.imread("the_book_thief.jpg")
gray_image = cv.cvtColor(image,cv.COLOR_BGR2GRAY)

sift = cv.xfeatures2d_SIFT.create()
keyPoints = sift.detect(image,None)

output = cv.drawKeypoints(image,keyPoints,None)

cv.imshow("FEATURES DETECTED",output)
cv.imshow("NORMAL",image)

cv.waitKey(0)
cv.destroyAllWindows()

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

К сожалению, согласно этой проблеме Github, SIFT больше не доступен в opencv> 3.4.2 . Поскольку вы используете OpenCV v4.2.0, он не включается, даже если вы установили pip install opencv-contrib-python, как показано в в этом посте . Обходной путь - понизить до любой предыдущей версии OpenCV, которая включает SIFT (я думаю, что любая версия ниже 3.4.3). Я был успешным при понижении до v3.4.2.16.

pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16

Используя ваш код с v3.4.2.16, SIFT работает

image

0 голосов
/ 05 февраля 2020

Решением вашей проблемы должна быть установка opencv- python -nonfree (доступна через pip).

Как говорится в сообщении об ошибке, SIFT запатентован и поэтому не включен в OpenCV по лицензионным причинам. Это входит в несвободную часть.

...