web-dev-qa-db-fra.com

Impossible d'utiliser SIFT dans Python OpenCV v4.20

J'utilise OpenCV v4.20 et PyCharm IDE. Je veux utiliser l'algorithme SIFT. Mais j'obtiens cette erreur. J'ai cherché des solutions à cette erreur sur Internet mais aucune d'elles ne m'a aidé. Connaissez-vous la solution de cette erreur? (Avec pip, je peux installer au moins la version 3.4.2.16 d'OpenCV)

Voici mon erreur:

Traceback (dernier appel le plus récent): Fichier "C: /Users/HP/PycharmProjects/features/featuredetect.py", ligne 7, dans sift = cv.xfeatures2d_SIFT.create ()

cv2.error: OpenCV (4.2.0) C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\sift.cpp: 1210: erreur: (-213: La fonction/fonctionnalité n'est pas implémentée) Cet algorithme est breveté et exclu de cette configuration; Définissez l'option OPENCV_ENABLE_NONFREE CMake et reconstruisez la bibliothèque dans la fonction 'cv :: xfeatures2d :: SIFT :: create'

Voici mon code:

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()
3
Yunus Emre Üzmez

J'ai eu le même problème auparavant. J'avais essayé toutes les méthodes mais finalement une méthode très simple fonctionnait pour moi à laquelle beaucoup ont déjà répondu. Cependant, il y a un petit changement dans mon approche.

  1. Étape 1:

    Désinstaller la bibliothèque opencv précédemment installée

    pip uninstall opencv-python

  2. Étape 2:

    Installez la bibliothèque de contrib opencv en raison d'un problème de copyright. Ici, nous utilisons la version 3.4.2.17

    pip install opencv-contrib-python==3.4.2.17

    erreur d'installation de la bibliothèque contrib opencv

    La figure ci-dessus montre l'erreur de version 3.4.2.16 Introuvable. Par conséquent, j'ai essayé avec la version 3.4.2.17. Si cette version ne fonctionne pas, essayez d'autres versions de 3.4.x.

  3. Étape 3:

    Puis exécutez ce qui suit

    import cv2 sift = cv2.xfeatures2d.SIFT_create()

C'est tout. Ça marche pour moi. J'espère que cela fonctionne aussi pour vous.

0
Nisan Chhetri