web-dev-qa-db-fra.com

OpenCV ORB descriptor: TypeError: type d'individu incorrect (doit être 'Feature2D' ou son dérivé)

J'ai suivi cet exemple simple OpenCV Feature Matching exactement:

import cv2

img = cv2.imread('box.png',0) # queryImage
orb = cv2.ORB()               # Initiate SIFT detector

# find the keypoints and descriptors with SIFT
kp1, des1 = orb.detectAndCompute(img, None)

et ont eu l'erreur suivante:

TypeError: Incorrect type of self (must be 'Feature2D' or its derivative)

J'utilise OpenCV 3.3.1

8
Wesam

Ceci est un problème de compatibilité de version OpenCV. Utilisez simplement cv2.ORB_create() au lieu de cv2.ORB().

Le code devrait ressembler à:

import cv2

img = cv2.imread('box.png',0) # queryImage
orb = cv2.ORB_create()        # Initiate SIFT detector

# find the keypoints and descriptors with SIFT
kp1, des1 = orb.detectAndCompute(img, None)
30
Wesam

Notez que les structures de python changent "fréquemment" (de toute façon dans les années d’historique Internet). C'est une bonne idée de faire attention à la version.

Allez ici pour trouver le bon lien: https://docs.opencv.org/

3.1.1 -> 3.1.0 -> https://docs.opencv.org/3.1.0/ (Tutoriels OpenCV-Python -> https://docs.opencv.org/ 3.1.0/d6/d00/tutorial_py_root.html ) ... pas aussi joli que ce (ancien) site readthedocs, mais plus précis. :)

1
Kaolin Fire