Ich folgte diesem einfachen OpenCV Feature Matching-Beispiel genau:
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)
und haben folgende Fehlermeldung erhalten:
TypeError: Incorrect type of self (must be 'Feature2D' or its derivative)
Ich verwende OpenCV 3.3.1
Dies ist ein Kompatibilitätsproblem der OpenCV-Version. Verwenden Sie einfach cv2.ORB_create()
anstelle von cv2.ORB()
.
Der Code sollte folgendermaßen aussehen:
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)
verwenden Sie dazu cv2.ORB_create ()
Beachten Sie, dass sich die Python-Strukturen "häufig" ändern (in Internet-Geschichtsjahren ohnehin). Es ist eine gute Idee, auf die Version zu achten.
Hier finden Sie den richtigen Link: https://docs.opencv.org/
3.1.1 -> 3.1.0 -> https://docs.opencv.org/3.1.0/ (OpenCV-Python-Lernprogramme -> https://docs.opencv.org/ 3.1.0/d6/d00/tutorial_py_root.html ) ... nicht so hübsch wie diese (alte) readededocs-Site, aber genauer. :)