it-swarm.com.ru

Дескриптор OpenCV ORB: TypeError: Неверный тип self (должен быть Feature2D или его производной)

Я следовал этому простому примеру OpenCV Feature Matching точно:

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)

и получаю следующую ошибку:

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

Я использую OpenCV 3.3.1

8
Wesam

Это проблема совместимости версий OpenCV. Просто используйте cv2.ORB_create() вместо cv2.ORB().

Код должен выглядеть так:

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

Обратите внимание, что структуры python меняются «часто» (во всяком случае, в годы истории Интернета). Это хорошая идея, чтобы обратить внимание на версию.

Перейдите сюда, чтобы найти нужную ссылку: https://docs.opencv.org/

3.1.1 -> 3.1.0 -> https://docs.opencv.org/3.1.0/ (Учебные руководства по OpenCV-Python -> https://docs.opencv.org/ 3.1.0/d6/d00/tutorial_py_root.html ) ... не такой красивый, как на этом (старом) сайте readthedocs, но более точный. :)

1
Kaolin Fire