web-dev-qa-db-ja.com

OpenCV ORB記述子:TypeError:不適切なタイプの自己(「Feature2D」またはその派生型でなければなりません)

私はこの単純な OpenCV機能マッチングの例 に正確に従いました:

import cv2

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

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

次のエラーが表示されています:

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

OpenCV 3.3.1を使用しています

15
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)
47
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サイトほどきれいではありませんが、より正確です。 :)

3
Kaolin Fire

cv2.ORB_create()を使用します

2
sameer maurya